Python专题

2018-09-24自如项目---阶段(二)---房间配置信息获

2018-09-24  本文已影响14人  右哼哼丨左哼哼

好的,继上次发布自如价格提取以后,我们继续完善其他功能采集信息

我们采集的房源基本字段包含:

还有一些非必需的字段:


这一期我们来看看房间配置如何抓取:

测试网址:http://sz.ziroom.com/z/vr/60638734.html

我们来分析一下这个网页的房间配置部分


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数据:

image.png
是个get请求,需要填写house_id和room_id(图中的id)
这个获取方法已经在上一期有讲解,在此不再赘述,想了解的朋友可以去看看这个:自如项目---阶段(一)---价格获取
好了,我们来捋一捋思路,其实蛮简单的,这一期主要讲了网页数据获取的分析思路,代码也不复杂
  1. 请求这个config?house_id=60102988&id=60638734
  2. 获取值为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一起学习
喜欢我的文章可以关注我哦,别忘了点个喜欢!

上一篇 下一篇

猜你喜欢

热点阅读