目录

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

导语

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

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

主要难点(坑)如下:

  1. 很多加密参数需要自行测试
  2. payload在爬虫post请求中的使用
  3. 请求到的json数据繁琐,难以分析
  4. 使用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网页端 | 旅游景点评论爬虫相关推荐

  1. python 爬取携程旅游景点评论

    python爬取携程旅游景点评论 爬取网址:https://you.ctrip.com/ 爬取评论全部代码 import requests import json import re import t ...

  2. 用HTML编写携程旅行,StaticHtmlPage(仿照携程写的静态网页)

    StaticHtmlPage(仿照携程写的静态网页) 文章目录 StaticHtmlPage(仿照携程写的静态网页) 一,项目简介 二,项目运行部署 三,项目结构 四,效果展示 五,技术囊括 HTML ...

  3. 微信开放平台开发第三方授权登陆(二):PC网页端

    微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平 ...

  4. 开源|携程机票 App KMM 跨端 KV 存储库 MMKV-Kotlin

    作者简介 禹昂,携程移动端资深工程师,专注于 Kotlin 移动端跨平台领域,Kotlin 中文社区核心成员,图书<Kotlin 编程实践>译者. 一.背景 携程机票移动端研发团队自 20 ...

  5. Html网页设计-旅游景点介绍

    项目运行截图 资料说明 Html网页设计-旅游景点介绍

  6. 国内旅游业务全面复苏 携程后疫情时代如何深耕旅游市场?

    [TechWeb]10月28日是携程21周岁生日.21岁的携程,今年却遭遇了成长以来最大的困难--受疫情影响,全球旅游业遭遇重创. 然而,凭借携程全球45000名员工的努力,在国内疫情基本得到控制的环 ...

  7. 干货 | 携程机票 App KMM 跨端生产实践

    作者简介 禹昂,携程移动端资深工程师,Kotlin 中文社区核心成员,图书<Kotlin 编程实践>译者. Derek,携程资深研发经理,专注于移动端开发,热衷于各种跨端技术的研究和实践. ...

  8. python爬取携程酒店信息_不写代码玩转爬虫实例(3) - 抓取携程酒店信息

    背景需求 有不少朋友问永恒君携程网站的酒店信息怎么抓取,今天这篇文章来分享一下使用web scraper来快速实现抓取携程酒店信息. 例如,在携程官网搜索北京 密云水库的酒店信息, 可以搜索到非常多的 ...

  9. Python旅游景点推荐系统 爬虫 酒店 旅游新闻

    技术栈:python语言 django框架 vue框架 scrapy爬虫框架 系统功能: 景点推荐.景点详情.旅游路线.旅游时节. 周边景点.周边酒店.评论.景点.站内旅游新闻. 旅游酒店.酒店详情. ...

最新文章

  1. javascript 实现php str_pad
  2. 英语语法---形容词性从句详解
  3. 分布式版本控制系统Mercurial(一):Mercurial基本功能介绍
  4. php安装 pear,php pear / pecl 扩展工具的安装和使用
  5. 在Java 8 Lambda上使用Apache Commons Functor功能接口
  6. android 自定义海报,Android仿海报工厂(完)
  7. HTTPS的SSL证书配置
  8. 算法-两个排序数组的中位数
  9. 用python把相同名称的放在一起,python实现将具有相同名称的文件放入相应的文件夹中,把,对应,内...
  10. 8086的总线操作顺序
  11. Window服务初级教程以及log4net配置文件初始化
  12. 《R数据可视化手册》——3.8 绘制百分比堆积条形图
  13. 微信经典飞机大战,承载多少人的回忆!
  14. 2022泰迪杯数据挖掘挑战赛C题方案及赛后总结:疫情背景下的周边游需求图谱分析
  15. 嵌入式DM(data matrix)码检测
  16. 修改android设备型号
  17. Qt编写可视化大屏电子看板系统17-柱状堆积图
  18. 如何使用cpolar内网穿透群晖NAS套件
  19. 快速云:云计算供应商在合同谈判时可能拒绝的三个事项以及要求
  20. java获取useragent_Java获取访问者的userAgent,系统和浏览器版本

热门文章

  1. scala spark sql 获得分组后的分位点
  2. 国内虚拟主机与香港云主机的优劣势
  3. 填词作文:新的一年,新的梦想
  4. YOLOv5-Lite:NCNN+Int8部署和量化,树莓派也可实时
  5. 最近一直在被螺旋槽成型铣刀的计算折磨着
  6. 前端初学者的痛,没学历没工作经验如何找工作?
  7. java使用网易企业邮箱,发送邮件失败
  8. SyntaxError: Non-UTF-8 code starting with '\xd4' in file C:/PyCharmWorkSpace py on line 2
  9. nbiot和2g_浅谈NBIOT
  10. adb root 权限运行