我首先选择杭州的二手房作为爬取的对象。
页面分析
问题
链家只显示前100页数据,100以后的数据根本就不显示,这样一次性最多只能抓取3000条数据。
解决办法
我通过分类抓取,只要保证每一类中的房源小于3000即可。这里我以面积作为选择的参数:
- 50平以下:2378
- 50-70平:3532
- 70-90平:5787
- 90-120平:2640
- 120-140平:2602
- 140-160平:984
- 160-200平:920
- 200平以上:848
其中50-70平、70-90平这两个分类房源超过3000,我按照居室数目再次细分抓取。
代码实现
import requests
from fake_useragent import UserAgent
from lxml import etree
import pandas as pd
import numpy as np
import time
import json
from collections import OrderedDict #用来生成有序的字典
import re
import os
import glob
页面解析函数
- 输入:页面数据(response.text)
- 输出:Pandas DataFrame数据、该分类的总页数
字符串中取出一个字典
我们可以通过json
来转换:
>>> import json
>>> user_info= '{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict = json.loads(user_info)
>>> user_dict
{
u'gender': u'male', u'age': 28, u'name': u'john'}
但是使用 json 进行转换存在一个潜在的问题。
注意:json
语法规定 数组或对象之中的字符串必须使用双引号,不能使用单引号
def parse(text):
selector = etree.HTML(text)
###下面是总页数解析过程
totalPageStr = selector.xpath('//div[@class="page-box fr"]/div[1]/@page-data')[0] #这是一个字符串,里面包含了一个字典