2018-09-24自如项目---阶段(二)---房间配置信息获
2018-09-24 本文已影响14人
右哼哼丨左哼哼
好的,继上次发布自如价格提取以后,我们继续完善其他功能采集信息
我们采集的房源基本字段包含:
- 房间标题
- 房间配置
- 地址
- 价格
- 面积
- 源链接
还有一些非必需的字段:
- 房间标签(如离地铁近或免物业费等)
- 房间朝向(南,北,东,西等)
- 交通情况(如离x号线xxx米或xx公交站xxx米)
- 周边信息
- 交通说明
这一期我们来看看房间配置如何抓取:
我们来分析一下这个网页的房间配置部分
image.png
使用这样的xpath即可以提取我们所需要的元素
.//*[@id='configBox']/ul/li[@class='have']/text()
image.png
看上去好像很简单,我们上代码测试一下
image.png
得到的结果是空值,那么是我们的xpath有问题吗,我们去除have属性测试一下
image.png
有返回结果了,但好像和我们所期望的并不一样,这个房源并没有洗衣机和智能锁,但是返回的数据却包含了这些元素,我们应该看看网页源码了
image.png
看来这是异步加载的网页请求了,老规矩,我们去XHR面板看看有没有相关的请求信息
image.png
这样的话,我们就得到了一个房间配置的信息了,但是他返回的是一些英文,我们需要存入的信息却是(床丨热水器丨WI-FI等),所以我们还需要写一个字典来做一次替换
con_dict = {'bed':'床','airCondition':'空调',
'calorifier':'热水器','chest':'衣柜',
'desk':'书桌','lock':'智能锁',
'microwave':'微波炉','washing':'洗衣机',
'wifi':'Wi-Fi'
}
我们看看如何请求这个json数据:
是个get请求,需要填写house_id和room_id(图中的id)
这个获取方法已经在上一期有讲解,在此不再赘述,想了解的朋友可以去看看这个:自如项目---阶段(一)---价格获取
好了,我们来捋一捋思路,其实蛮简单的,这一期主要讲了网页数据获取的分析思路,代码也不复杂
- 请求这个config?house_id=60102988&id=60638734
- 获取值为1的key,并通过字典替换为中文信息
具体方法如下:
image.png
image.png
下面附上源码:
import requests
import time
class ZrConApi():
'''
通过给定的houseID和roomID,返回房间配置信息
'''
headers = {
# 'Host': 'sz.ziroom.com',
'Referer': 'http://sz.ziroom.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
}
con_dict = {'bed':'床','airCondition':'空调',
'calorifier':'热水器','chest':'衣柜',
'desk':'书桌','lock':'智能锁',
'microwave':'微波炉','washing':'洗衣机',
'wifi':'Wi-Fi'
}
def get_config(self,roomid,houseid,S):
url = 'http://sz.ziroom.com/detail/config?house_id=%s&id=%s' % (houseid,roomid)
res = S.get(url,headers=self.headers)
if res.status_code == 200:
temp = res.json()
print(temp)
# 检测返回数据中的json状态,非200需要重新请求
if temp['code'] == 200:
temp_list = []
# 请求过快,即使code为200,但会返回data为空的json,需要判断处理
if temp['data'] != []:
data = temp['data']
# 使用get_keys函数,提取json数据中值为1的数据
list_keys = self.get_keys(data,1)
for i in list_keys:
# 将值为1的英文数据通过字典替换为中文
temp_list.append(self.con_dict.get(i))
return temp_list
else:
print('cookies过期,','当前时间:%s' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 标记-1状态,初始化Session,重新获取
return -1
elif temp['code'] == 404:
print('cookies已过期')
exit()
else:
print('get_config异常:%s' % data.status_code)
def get_keys(self,data,value):
# 将值是1的配置返回调用函数
return [k for k, v in data.items() if v == value]
if __name__ == '__main__':
# 标记程序启动时间
start = time.clock()
S = requests.Session()
zr = ZrConApi()
zr.get_config(61425129,60228611,S)
# 标记程序结束时间
end = time.clock()
# 打印程序耗时
print(end - start)
下一期讲述:获取自如详情页其他信息配合本次房间配置获取API,写入mysql数据库
喜欢学习python爬虫的朋友,可以加交流群:692-858-412一起学习
喜欢我的文章可以关注我哦,别忘了点个喜欢!