爬虫|网页爬取方法和网页解析方法

爬取网页的方法

按照网页和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 等

参考资料

这可能是你见过的最全的网络爬虫干货总结!