ad

学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_10.1 程序设计

网友投稿 123 2023-11-13

【摘要】 本书摘自《Python网络爬虫 从入门到精通》一书中第10章,第1节,吕云翔、张扬和韩延刚等编著。

10.1 程序设计

学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_10.1 程序设计

请求、解析、处理数据是通用爬虫的三个步骤,在这个案例中,实现起来就是调用 12306 的查询接口,解析返回车次车票数据后,再通过微信发出通知。所以实现这个程序需 要做以下一些工作:分析网页,确定用哪种方法爬取,比如,是否要模拟浏览器,或者能直 接找到接口请求规则;请求之后数据的解析,这步工作需要理解返回数据的意义;如何通知 到微信,这一步将借助一个第三方消息推送工具——Server 酱。

10.1.1 分析网页

打开12306,并打开浏览器的调试模式,浏览器推荐用 Chrome 或者 Firefox, 然后按照 自己的使用习惯去查询车票。借助开发调试工具,如网络抓包工具,或者浏览器自带的 DevTools, 观察浏览器调试窗口中的网络请求。通过多次观察找到查询余票的请求,发现不 是 AJAX 方式的请求,那么就可以基本排除必须用模拟浏览器的方式 Selenium 去实现,而 是用 Python 的 Requests 就能实现。

寻找查询接口的具体方法为,在 Chrome 浏览器中按

看到这个地址返回的 JSON 串,说明该接口对 Header、Cookie, 以及其他一些请求都没有限 制,就是普通的 GET 请求,这样开发者就可以很方便地用 Python 构造这个 GET 请求。 一般情 况下,对这种 GET 请求用浏览器查看请求结果就够用了,如果遇到 POST 请求,以及需要对 Cookie 、Header 等进行限制的话,就可以用 Postman 这个工具,用来调试POST 请求。

通过浏览器的调试工具,能找到请求火车票余票信息的接口地址,地址为: https://kyfw. 12306.cn/otn/lef'Ticket/query?leftTicketDTO.train_date=2018-08-08&leftTicketDTO.from_station= BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT。

这个请求的参数如图10-2所示,从中可以看到,这个请求 (Request) 需要传入4个参 数,分别是日期、始发站、终点站和乘客类型。

Query String Parameters view source view URL encoded

leftTicketDTO.train_date:2018-08-08

leftTicketDTO.from_station:BJP

leftTicketDTO.to_station:SHH

purpose_codes:ADULT

其中,车站对应的码表可以在浏览器调试模式下找到网站源码,对应的 js 文件是: https:/kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9061。

请求该js 文件,得到的结果为: var station_names ='@bjb|北京北|VAP|beijingbeilbjb|0@ bjd| 北京东|BOP|beijingdongbjd|1@bji 北京 |BJP|beijing|bjl2@bjn| 北京南[VNP|beijingnan|bjn/3 @bjx| 北京西|BXP|beijingxibjx|4@gzn| 广州南|IZQlguangzhounan|gzn|5……包括了12306 网站 上所有的铁路站点及其对应的码表。最后一个参数 purpose_codes 可以通过手动勾选“普通”“学生”复选框观察得到, “ADULT” 对应成人票,“0X00” 对应学生票。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:打开《Python 可视化数据分析》_学会挖掘大数据的价值_2.2 Python 数据类型
下一篇:打开《OpenStack 云平台-部署与高可用实战》_2.3.6 身份认证服务Keystone 端点
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×