Python基础之12306车票信息抓取案例
注:12306上请求网址链接经常变化,需要随时检查更改(我已经修改三遍了),请求的数据也有小几率发生变动,所以也需要检查更改
2018-10-22 第四遍修改 修改url地址
2019-02-11 第五遍修改 12306抓取地址修改,重新获取地址,数据结构未变
2020-10-09 第六遍修改 12306增加cookie认证,数据结构未变
2020-12-05 第七遍修改 处理获取车站编号函数的路径问题(感谢 MikeR794 的提醒,Thanks♪(・ω・)ノ)
注2:这只是一个初学python时写的demo,功能也不健全。建议了解爬虫机制后,尝试自己采集12306数据(12306只有频率检测,算是爬虫开发中最友好的网站了)
1.准备工作
(1)安装模块
本案例需要使用Python内置模块之外的docopt模块、requests模块、prettytable模块
安装方法:使用管理员身份打开控制台,使用指令 pip install 模块名
分别安装三个模块
(2)简易教程
docopt:
docopt
:用来帮助开发人员定义对应的终端运行指令集,当开发人员通过终端输入执行命令时,此时docopt方法会自动根据指令集完成对终端指令的匹配,之后将匹配结果以字典的形式返回给开发人员
Usage
:指令管理,用户输入后系统会从上到下依次匹配
Options
:指令注释,可省略
-abc
:代表选择项,最终对应的结果是True或False
<from>
:代表参数from,用来接收终端输入的参数数据
[]
:代表里面的内容是可选的
()
:代表里面的内容是必须的
a|b
:代表ab两种内容选择一种输入
<from >...
:此时代表可变参数,该参数对应的数据是一个列表,可以用来接受任意多个参数数据
"""DOC OPT
Usage:
doc_opt.py start
doc_opt.py [-gdkzt] <from> <to> <time>
Options:
-g 高铁
-d 动车
-k 普快
-z 直达
-t 特快
"""
注意:
1. 指令前必须加入该文件名称
2. Usage和Option间应加入回车,否则不会执行指令
3. 该段文字写在文件最上部
prettytable
prettytable
用于将数据整理成表格输出到控制台,只适用于控制台输出
# 创建表格对象
table = PrettyTable(['name', 'age', 'sex', 'birth'])
# 添加行
table.add_row(['小呆呆', 20, '男', '2018-9-18'])
# 显示
print(table)
prettytable中有很多属性,在此不再一一讲解,有兴趣可以百度查找
requests
requests
:完成网络请求的模块
网络请求:服务器和客户端进行数据交互的过程
网络请求需要两部分内容:
网址(url):用来帮助开发人员找到指定的服务器
参数:用来告知服务器需要提供的服务内容,可以保证服务器能够提供精准的服务
在网络请求中有两个非常流行的请求方式,分别是:GET和POST
GET:客户端向服务器发起请求同时把服务器需要的数据一并传给服务器。因此GET请求的网址和参数通过"?"组合在一起,此种方式不利于数据的安全。同时GET请求只能向服务器发送最多288个字节的数据,因此数据传输量比较小。综上GET一般用来向服务器获取数据
POST:客户端向服务器发去链接请求,链接成功