/data_spider_12306

爬12306数据

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

温馨提示:仅供学习,请理智使用

Python爬12306余票

项目地址:https://github.com/ZWN2001/data_spider_12306

数据库课设使用的爬虫

半成品,需要根据todo自己改改

main.py查的是学生票

main2.py查的是成人票

爬虫教程在 here

一些问题的解答

为什么要分成人与学生

如果你进行请求就会发现默认(成人票)只能请求到近几个月的数据。

而学生票则可以请求到更多。

 

成人与学生爬虫的区别

区别主要在请求的url与使用的cookie上。

url会使用purpose_codes参数进行区分。

cookie上,学生票要比成人票的cookie严格很多,无法直接通过selenium获取,只能手动填写、更新。

成人票使用了selenium的无头浏览器,默认使用了谷歌浏览器。

 

cookie的结构

两种票的cookie都是由两部分组成的,一部分是固定的cookie数据,通过多次相应头的set_Cookie设置的,从浏览器中可以获取,学生票cookie还会对其中的一些属性进行修改,并且会添加加密过的fo属性。

另一部分是请求的行程信息,其中起点与终点的值为站名,站编码的形式并用escape编码,这一点在代码中有清晰的体现。

 

其他可能存疑的技术点

协程、aiohttpasynciorequest,在教程里都有写

 

可能的其他问题

关于连接池

使用了两种方案,更推荐单连接池但是容易被12306发现并ban掉。

 

关于被ban

使用时很可能因为各种原因被ban,报错的网页很明显,是后端发现了爬虫,但是不影响cookie的使用,(仅使用aiohttp时会有这种问题),解决方案是在循环时添加一些sleep以避免被当成是服务拒绝攻击。