这里先讲下之前遇到的坑,之前想爬取网站上的内容是用python的requests+lxml.etree。用requests从网上获取页面的html源码,然后用etree根据xpath解析路径得到数据。但是有一次用同样的方法爬取12306的数据却死活爬不出来,后来我分析网站的源码,发现12306的网站上的出票情况全都是通过js获取的json数据显示的,我本来打算用requests获得json数据,然后用python的split()提取其中的json,但是再去网站分析数据发现,它下载下来的json数据中票的有无和html模板上的票的种类不是一一对应的,于是我放弃了这种方法。
获取浏览器的数据,进行xpath解析
对于requests无法获取的json数据,我使用selenium+etree来获取。
selenium库
selenium的原理是模拟浏览器解析服务器发送过来的数据,相比于requests库,会多一步浏览器解析的过程。浏览器对服务器数据的解析主要为,加载,解析,渲染三步,因为浏览器对数据的解析,也就造成了,将requests.get获得的数据用浏览器获得的xpath,无法get到自己相要的数据。
selenium的安装方法
pip install selenium
但是在安装完selenium后还需要安装浏览器的驱动,如果用的firefox,就去firefox的官网下载geckodriver。如果用的chrome,就去chrome官网下载chromedriver。然后将解压后的geckodriver.exe,设置环境变量。
然后就可以获取在浏览器端看见的html数据了。
下面附上我的代码
代码
1 | from selenium import webdriver |
ps: send_message这个包是我自己封装的一个包,主要是为了实现发短信的功能。