携程逆向爬虫 | PC网页端 | 旅游景点评论爬虫
目录
- 导语
- 1. 获取所有城市_id
- 2. 分析评论信息位置
- 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']//20print("{}市共有{}条景点信息,共{}页".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等等多种反爬手段,提高爬虫稳定性和爬虫效率。
携程逆向爬虫 | PC网页端 | 旅游景点评论爬虫相关推荐
- python 爬取携程旅游景点评论
python爬取携程旅游景点评论 爬取网址:https://you.ctrip.com/ 爬取评论全部代码 import requests import json import re import t ...
- 用HTML编写携程旅行,StaticHtmlPage(仿照携程写的静态网页)
StaticHtmlPage(仿照携程写的静态网页) 文章目录 StaticHtmlPage(仿照携程写的静态网页) 一,项目简介 二,项目运行部署 三,项目结构 四,效果展示 五,技术囊括 HTML ...
- 微信开放平台开发第三方授权登陆(二):PC网页端
微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平 ...
- 开源|携程机票 App KMM 跨端 KV 存储库 MMKV-Kotlin
作者简介 禹昂,携程移动端资深工程师,专注于 Kotlin 移动端跨平台领域,Kotlin 中文社区核心成员,图书<Kotlin 编程实践>译者. 一.背景 携程机票移动端研发团队自 20 ...
- Html网页设计-旅游景点介绍
项目运行截图 资料说明 Html网页设计-旅游景点介绍
- 国内旅游业务全面复苏 携程后疫情时代如何深耕旅游市场?
[TechWeb]10月28日是携程21周岁生日.21岁的携程,今年却遭遇了成长以来最大的困难--受疫情影响,全球旅游业遭遇重创. 然而,凭借携程全球45000名员工的努力,在国内疫情基本得到控制的环 ...
- 干货 | 携程机票 App KMM 跨端生产实践
作者简介 禹昂,携程移动端资深工程师,Kotlin 中文社区核心成员,图书<Kotlin 编程实践>译者. Derek,携程资深研发经理,专注于移动端开发,热衷于各种跨端技术的研究和实践. ...
- python爬取携程酒店信息_不写代码玩转爬虫实例(3) - 抓取携程酒店信息
背景需求 有不少朋友问永恒君携程网站的酒店信息怎么抓取,今天这篇文章来分享一下使用web scraper来快速实现抓取携程酒店信息. 例如,在携程官网搜索北京 密云水库的酒店信息, 可以搜索到非常多的 ...
- Python旅游景点推荐系统 爬虫 酒店 旅游新闻
技术栈:python语言 django框架 vue框架 scrapy爬虫框架 系统功能: 景点推荐.景点详情.旅游路线.旅游时节. 周边景点.周边酒店.评论.景点.站内旅游新闻. 旅游酒店.酒店详情. ...
最新文章
- javascript 实现php str_pad
- 英语语法---形容词性从句详解
- 分布式版本控制系统Mercurial(一):Mercurial基本功能介绍
- php安装 pear,php pear / pecl 扩展工具的安装和使用
- 在Java 8 Lambda上使用Apache Commons Functor功能接口
- android 自定义海报,Android仿海报工厂(完)
- HTTPS的SSL证书配置
- 算法-两个排序数组的中位数
- 用python把相同名称的放在一起,python实现将具有相同名称的文件放入相应的文件夹中,把,对应,内...
- 8086的总线操作顺序
- Window服务初级教程以及log4net配置文件初始化
- 《R数据可视化手册》——3.8 绘制百分比堆积条形图
- 微信经典飞机大战,承载多少人的回忆!
- 2022泰迪杯数据挖掘挑战赛C题方案及赛后总结:疫情背景下的周边游需求图谱分析
- 嵌入式DM(data matrix)码检测
- 修改android设备型号
- Qt编写可视化大屏电子看板系统17-柱状堆积图
- 如何使用cpolar内网穿透群晖NAS套件
- 快速云:云计算供应商在合同谈判时可能拒绝的三个事项以及要求
- java获取useragent_Java获取访问者的userAgent,系统和浏览器版本
热门文章
- scala spark sql 获得分组后的分位点
- 国内虚拟主机与香港云主机的优劣势
- 填词作文:新的一年,新的梦想
- YOLOv5-Lite:NCNN+Int8部署和量化,树莓派也可实时
- 最近一直在被螺旋槽成型铣刀的计算折磨着
- 前端初学者的痛,没学历没工作经验如何找工作?
- java使用网易企业邮箱,发送邮件失败
- SyntaxError: Non-UTF-8 code starting with '\xd4' in file C:/PyCharmWorkSpace py on line 2
- nbiot和2g_浅谈NBIOT
- adb root 权限运行