链家网是集房源信息搜索、产品研发、大数据处理、服务标准建立为一体的以数据驱动的全价值链房产服务平台。主营:二手房、租房、新房。通过链家网的数据可以很方便的获取商品房的市场信息
此次目的是抓取链家网广州地区二手房的数据
首先明确步骤:
- 分析网页
- 分析数据节点
- 编写爬虫程序
- 存储数据
首先分析网页
链家网网址在这 广州链家网二手房
可以看到一共有25934套房源,数据是更新的,我爬取得时候是没有这么多数据的
接下来观察网页构造
可以观察到一个网页是有30个< li >标签,一个标签对应一个房源信息,而且网页只有100页,我们通过观察发现网页的翻页只是在源地址后面加个pg的变量
但是实测将pg填101会重新跳转到第一页,所以我们一共可以观察到3000的信息,后面的无法获取,需要重新观察
通过观察发现可以按照地区的分类进去抓取数据,而且每个地区的成交数量都没有超过3000套。也就是我们可以在100页内将数据全部抓取。
通过观察发现各个房源的标签是不一样的,而且实测无法在列表页就实现数据的全部抓取,所以我们只能到房源详情页进行抓取
在这里我们确定我们要抓的数据是售价,平方单价,挂牌价,关注人数,房屋户型,所在楼层等等
那么现在爬虫思路就是
- 先爬取所有地区链接
- 根据地区链接,在各地区链接下抓取所有列表房源的url
- 根据抓取到的房源url进行访问抓取数据
接下来就是代码的构建了
首先先抓取所有地区并存储在数据库中:
import requests
from urllib.parse import urljoin
from scrapy.selector import Selector
import pymongo
from fake_useragent import UserAgent
ua = UserAgent()
Mymongo = pymongo.MongoClient('localhost', 27017) # 连接本地服务
lianjia = Mymongo['lianjia'] # 链接数据库
region_url_collection = lianjia['region_url'] # 集合对象
base_url = "https://gz.lianjia.com/chengjiao/"
region_list = ['tianhe', 'yuexiu', 'liwan', 'haizhu', 'panyu', 'baiyun', 'huangpugz', 'conghua', 'zengcheng', 'huadou', 'nansha']
def get_region_url():
for i in range(0, len(region_list)):
url = urljoin(base_url, region_list[i]) # 拼接URL
response = requests.get(url, headers={'User-Agent': s