爬虫|网页爬取方法和网页解析方法
爬取网页的方法
按照网页和APP划分,参考崔庆才老师的分享,可以划分为:网页爬取和App爬取。
网页爬取
(1)服务端渲染:页面结果由服务器渲染后返回,有效信息包括在服务器发来的HTML中,比如猫眼电影网站。
使用基本的HTTP请求库便可以实现爬取,如urllib、urllib3、pycurl、hyper、requests、grab等框架,其中运用最多的是requests。
(2)客户端渲染:页面内容由JavaScript渲染而成,真实数据通过Ajax获取,比如淘宝,今日头条网页内容。当操作获取更多数据时,URL没有变化。
客户端渲染,崔老师给了四个方法:
- 寻找Ajax接口,找到参数、请求方式,然后用HTTP库模拟;使用代理包Fiddler/Charles查看接口。
- 模拟浏览器执行,适用于借口复杂的情况。如使用Selenium、Splinter、Spynner、pyppeteer、PhantomJS、Splash、requests-html等实现,最常用的是Selenium。
- 直接提取JavaScript数据,适用于数据包含在HTML的结果之中,使用正则表达式即可获取。
- 模拟执行JavaScript。适用于已经掌握了JavaScript的某些执行和加密逻辑,如使用Selenium、PyExecJS、PyV8、js2py等库.
渲染:英文是render,通俗理解是通过特定方式把信息呈现给用户的过程。
App爬取
(1)普通无加密接口:
直接抓保获取请求,抓包工具有 Charles、Fiddler、mitmproxy。
(2)加密参数接口:
使用Fiddler、mitmdump、Xposed 等实时处理;破解加密逻辑。
(3)加密内容接口:
适用于获取的内容看不懂。可以使用可见即可爬的工具Appium、Xposed、hook获取渲染结果;反编译破解。
(4)非常规协议接口
非常规HTTP、HTTPS协议,直接抓包没有结果。使用 Wireshark抓取所有协议包,或使用Tcpdump实现TCP数据包截获。
如何选择爬取方法
在爬取内容前,需要先对网页的结构进行分析,分析需要获取的数据储存在哪里,从而选择适合的爬取方法。
页面解析的方法
解析方法 | 使用的库 |
---|---|
正则表达式 | re |
Xpath | lmx, Serapy Selecto |
Json/XML | json, xml2dct |
CSS Selector | pyquery, cssselect |
此外还有一种方法是智能解析,因学习深度没有达到,此部分内容先不展开。
内容储存
爬取内容的储存方法有很多种,需要根据需求选择储存方式。
文件形式 | 储存载体 | 常用库 |
---|---|---|
文件 | JSON、CSV、TXT、图⽚、视频、⾳频等 | csv、xlwt、json、pandas、pickle、python-docx 等 |
数据库 | MySQL、MongoDB、HBase 等 | pymysql、pymssql、redis-py、pymongo、py2neo、thrift |
搜索引擎 | Solr、ElasticSearch 等 | elasticsearch、pysolr 等 |
云存储 | 七⽜云、又拍云、阿里云、腾讯云、AmazonS3 等 | qiniu、upyun、boto、azure-storage、google-cloud-storage 等 |