副标题[/!--empirenews.page--]
技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战
房价高是北漂们一直关心的话题,本文就对北京的二手房数据进行了分析。
本文主要分为两部分:Python爬取赶集网北京二手房数据,R对爬取的二手房房价做线性回归分析,适合刚刚接触Python&R的同学们学习参考。
01、Python爬取赶集网北京二手房数据

入门爬虫一个月,所以对每一个网站都使用了Xpath、Beautiful Soup、正则三种方法分别爬取,用于练习巩固。数据来源如下:

Xpath爬取:
这里主要解决运用Xpath如何判断某些元素是否存在的问题,比如如果房屋没有装修信息,不加上判断,某些元素不存在就会导致爬取中断。
- import requests
- from lxml import etree
- from requests.exceptions import RequestException
- import multiprocessing
- import time
-
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
-
- def get_one_page(url):
- try:
- response = requests.get(url, headers=headers)
- if response.status_code == 200:
- return response.text
- return None
- except RequestException:
- return None
-
- def parse_one_page(content):
- try:
- selector = etree.HTML(content)
- ALL = selector.xpath('//*[@id="f_mew_list"]/div[6]/div[1]/div[3]/div[1]/div')
- for div in ALL:
- yield {
- 'Name': div.xpath('dl/dd[1]/a/text()')[0],
- 'Type': div.xpath('dl/dd[2]/span[1]/text()')[0],
- 'Area': div.xpath('dl/dd[2]/span[3]/text()')[0],
- 'Towards': div.xpath('dl/dd[2]/span[5]/text()')[0],
- 'Floor': div.xpath('dl/dd[2]/span[7]/text()')[0].strip().replace('n', ""),
- 'Decorate': div.xpath('dl/dd[2]/span[9]/text()')[0],
- #地址需要特殊处理一下
- 'Address': div.xpath('dl/dd[3]//text()')[1]+div.xpath('dl/dd[3]//text()')[3].replace('n','')+div.xpath('dl/dd[3]//text()')[4].strip(),
- 'TotalPrice': div.xpath('dl/dd[5]/div[1]/span[1]/text()')[0] + div.xpath('dl/dd[5]/div[1]/span[2]/text()')[0],
- 'Price': div.xpath('dl/dd[5]/div[2]/text()')[0]
- }
- if div['Name','Type','Area','Towards','Floor','Decorate','Address','TotalPrice','Price'] == None:##这里加上判断,如果其中一个元素为空,则输出None
- return None
- except Exception:
- return None
-
- def main():
- for i in range(1, 500):#这里设置爬取500页数据,在数据范围内,大家可以自设置爬取的量
- url = 'http://bj.ganji.com/fang5/o{}/'.format(i)
- content = get_one_page(url)
- print('第{}页抓取完毕'.format(i))
- for div in parse_one_page(content):
- print(div)
-
- if __name__ == '__main__':
- main()
(编辑:武汉站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|