去哪儿网机票爬虫
最近公司有一个新的需求,就是需要爬某一天飞机票的数据,先让我爬携程,去哪儿网的数据,携程的话,还是比较简单的,但是在去哪儿网就遇到问题了,刚开始的时候我是用requests模块来爬去哪儿网,在请求的头信息,有一些随机值,每次请求都不一样,即使你使用上一次请求的随机值,还是会给你返回假数据。我自己给它生成一些随机字符串去请求,但依然返回假数据。最后没有办法,我只能使用selenium大法了。
在使用selenium的过程中,去哪儿网还做了一些反selenum爬虫:
1. 用js识别了selenium
当我把地点,时间都选好了,点击加载,进入到各个航班信息页面,其他部分都显示了,核心数据,一直加载中,我电脑都死机了好几次。
这种反爬第一次遇到,只能百度了,最后在这位大神找到解决办法,链接:https://www.cnblogs.com/xieqiankun/p/hide-webdriver.html
解决:
在option加参数, 试浏览器停止“开发者模式运行”;我使用的chrome浏览器,所以:
option.add_experimental_option('excludeSwitches', ['enable-automation'])
然后数据就成功显示出来,
2. 在飞机票价格上,使用css,把价格打乱,让你爬不到真正的价格
在我以为即将成功的时候,发现一个新的问题了,使用xpath匹配的数据,有很多打乱的数据,而且还有一些干扰数据在里面:
<em class="rel"> <b style="width:48px;left:-48px"> <i style=width: 16px;"">6</i> <i style=width: 16px;"">5</i> <i style=width: 16px;"">6</i> </b> <b style="width: 16px;left:-48px">7</b> </em>
真正的价格:756
规则:
主要看css宽度
如上面:
总宽度48px
展示的值b标签里面的i标签的text值,除了一个b标签是用来展示的,其他b标签的值替换i标签中text值即为真正的值。
每个b标签里面style中left值表示位置,如left:-48px, 替换第一个i, 如果left:-16px, 就替换第3个i。
思路就是这样的了,代码我放到github上面的,链接:https://github.com/bobos008/Airticket
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效