携程逆向爬虫 您所在的位置:网站首页 1001旅游网正规吗 携程逆向爬虫

携程逆向爬虫

2024-07-02 07:18| 来源: 网络整理| 查看: 265

目录 导语1. 获取所有城市_id2. 分析评论信息位置3. 获取当前市 景点页数4.获取当前景点的评论页数5. 总体爬虫效果6. 注意

导语

自携程更新后,这是全网首篇,关于新版携程的逆向爬虫

最近由于项目需要,编写了携程逆向爬虫脚本,遇到过一些难点,然而在携程更新网页端之后,也没有大牛写过新的关于携程爬虫的文章。 由于还没有创建github(有点懒),代码需要的可以私信,这里只提供思路和过程 在此,给网友提供思路和全站爬虫效果,有需要的可以私信我

主要难点(坑)如下:

很多加密参数需要自行测试payload在爬虫post请求中的使用请求到的json数据繁琐,难以分析使用postman分析post请求 1. 获取所有城市_id

在这里插入图片描述 利用正则表达式和json解析

def get_city_id_item(): url = "https://piao.ctrip.com/ticket" res_str = requests.get(url=url,headers=headers).content.decode() json_str = re.findall('window.__INITIAL_STATE__ = (.*?),"userAgent"',res_str)[0] + '}' json_dict = json.loads(json_str) city_item = {} for city in json_dict['citiesData']['domesticcity']['cities']: for i in city['cities']: city_item[i['name']] = i['id'] # print(city_item) return city_item 2. 分析评论信息位置

通过抓包可以发现,评论信息是存放在以下位置的: 在这里插入图片描述

点击旅游景点的第二页和第三页,分析发送的POST请求,以及url链接,这里我们可以发现,每次请求时,post请求对应url链接是不断变化的,我们要通过JS逆向来分析url产生过程,通过execjs来执行逆向后的js。 在这里插入图片描述

逆向过程(略)这里实在是比较复杂,语言不好描述,视频可能方便些。 效果如下: 在这里插入图片描述

3. 获取当前市 景点页数

比如第一个城市安吉,它的旅游景点的页数是304页,一些景点少的,才个位数,所以我们这里不能爬取固定页数,程序很容易报错。 在这里插入图片描述

通过分析发现,这个post请求中存在总旅游景点数,我们用它除以每页的景点数量,可以得到景点页数 在这里插入图片描述

r = requests.post(url, data=payloaddata, headers=headers) page_num = r.json()['total']//20 print("{}市共有{}条景点信息,共{}页".format(i[0],r.json()['total'],page_num))

效果: 在这里插入图片描述

4.获取当前景点的评论页数

比如 安吉市第一条,云上草原 在这里插入图片描述 第二条 杭州Hello Kitty乐园 不知道为啥携程把 杭州Hello Kitty乐园 算成安吉的。。。这不是关键 在这里插入图片描述 代码:

detail_item['风景区名称'] = product['basicInfo']['name'] encode_url = get_encode_url() comment_page_num = product['statistics']['commentInfo']['count'] // 10 print("{}共有{}条评论,页数为:{}".format(detail_item['风景区名称'],product['statistics']['commentInfo']['count'],comment_page_num))

效果: 在这里插入图片描述

5. 总体爬虫效果

在这里插入图片描述 在这里插入图片描述

6. 注意

全国景点评论爬虫数据量非常庞大,建议使用分布式爬虫,代理IP,随机UA等等多种反爬手段,提高爬虫稳定性和爬虫效率。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有