sigmawork

发起请求

学习爬虫,第一步便是要能够模拟浏览器向服务器发出请求。

这一基础操作可以借助 Python 的库来帮助我们实现,我们只需要学会这些库的使用即可。

最基础的 HTTP 库有:

  • urllib
  • requests
  • httpx

urllib

注:在 Python2 中,有 urllib 和 urllib2 两个库来实现 HTTP 请求的发送。而在 Python3 中,urllib2 库已经不复存在,统一为 urllib。

urllib 库是 Python 内置的 HTTP 请求库,即不需要额外安装,可直接使用。

urllib 库有 4 个模块:request、error、parse、robotparser。基本功能如图1-1所示:

urllib库4模块关系图

图1-1 urllib库模块关系与作用

有关 urllib 库的用法请自行去学习,这里给出一些学习资料,不再赘述。

requests

urllib 库里都是一些基础模块,有一些模块的实用性还是很强的,例如可以利用 parse 模块对 URL 进行各种处理;但是也有一些局限性,例如:处理网页验证Cookie 时需要额外的处理才可实现,另外实现 POST、PUT 等请求时的写法也不太方便。

为了更加方便地实现这些操作,就有了更强大的库 requests。

请自行学习该库的用法,这里给出一些学习资料。

httpx

有了 urllib 库和 requests 库,已经可以爬取绝大多数网站的数据,但对于一些做了特殊措施的网站仍然不能爬取,这是因为这些网站强制使用 HTTP/2.0 协议访问,而 urllib 和 requests 只支持 HTTP/1.1,不支持 HTTP/2.0。

这时候就需要支持 HTTP/2.0 的请求库,即 httpx 。httpx 除了可以完成基本爬虫的请求操作之外,还支持做异步爬虫,可以发起异步客户端请求,推荐使用。

请自行学习该库的用法,这里给出一些学习资料。

数据解析

学习爬虫,第二步便是要能够将请求得到的网页数据进行解析,获取自己想要的数据。

最基础的解析库有:

  • re:正则表达式
  • lxml:XPath方式解析
  • Beautiful Soup
  • pyquery
  • parsel

re

正则表达式,不用多说,用来处理字符串的强大工具。我们在互联网上抓取到的数据大多是 HTML 文档,返回也是字符串内容。

re 是 Python 使用正则表达式的库,相关用法请自行学习,这里给出学习资料。

lxml(XPath)

XPath 是 XML 路径语言,可以用来在 XML 文档中查找信息,但同样适用于 HTML 文档的搜索。

XPath 解析规则可以用 lxml 库来实现,这里列出 XPath 的一个常用匹配规则:

//title[@lang=\'eng\']

XPath 功能非常强大,内置函数非常多,熟练使用之后,可以大大提升 HTML 信息的效率。

有关 lxml 库的用法请自行去学习,这里给出一些学习资料。

  • https://lxml.de/

  • 《Python3网络爬虫开发实战(崔庆才著)》 P90-P98

Beautiful Soup

前面介绍我们可以用正则表达式来处理爬取到的内容,但是一旦正则表达式写的有问题,得到的结果就不是我们想获得的内容,且写起来比较繁琐,解析规则不易读懂。

每一个网页都有一定的特殊结构和层级关系(DOM树),很多节点都用 id 或 class 来做区分,因此可以借助它们的结构和属性来提取数据。Beautiful Soup 库用一些简单的语句就可以帮助我们完成这一目标,而不需要借助写复杂的正则表达式匹配规则。

Beautiful Soup 有节点选择题,也有 CSS 选择器,用 Beautiful Soup 可以省去很多繁琐的提取工作,提高解析网页的效率。

请自行学习该库的用法,这里给出一些学习资料。

pyquery

pyquery 一个类似 jQuery 的 Python 库(来自官网),主要支持 CSS 选择器的方式来解析数据,pyquery 是基于 lxml 模块,而 lxml 和正则表达式都是 C 语言写的,只有 Beautiful Soup 是用纯 Python 编写的,所以在实测中 Beautiful Soup 的解析速度比其他几种解析库要慢很多。

请自行学习该库的用法,这里给出一些学习资料。

parsel

前面有 lxml 解析器,使用 XPath、pyquery库,CSS 选择器来提取页面数据。

而 parsel 库可以将 XPath 和 CSS 选择器 二者穿插使用。同时,Scapy 的选择器是基于 parsel 做的二次封装,因此 parsel 的 API 和 Scrapy 选择器的 API 极其相似。

总之,parsel 库是一个融合了 XPath、CSS 选择器和正则表达式的提取库,功能强大又灵活,推荐学习,同时可以为学习 Scrapy 框架打下基础。

请自行学习该库的用法,这里给出一些学习资料。

数据存储

小规模数据

对于一些小批量关系型数据可以直接保存为文本文件,如TXT,JSON,CSV等。

相关的知识及库有:文件操作、json、csv

对于其中的 csv 文件,也可以直接用 pandas 等库来进行相关操作。

请自行学习相关知识及库的用法,这里给出一些相关学习资料。

大规模数据

如有需要,也可以将数据存储到数据库中。

其中,关系型数据库可以选择 MySQL,Python 操作类库为 pymysql,

非关系型数据库可以选择 MongoDB 和 Redis,Python 操作类库分别为 pymongo,redis

请自行学习相关知识及库的用法,这里给出一些相关学习资料。

搜索引擎存储

如果为了便于存储和检索,想要实现自己的搜索引擎,那么可以使用 Elasticsearch。

这是一个全文搜索引擎,可以快速存储、搜索和分析海量数据,将爬取到的数据存储到 Elasticsearch 中,检索时会非常方便。

请自行学习相关知识及库的用法,这里给出一些相关学习资料。

分类:

技术点:

相关文章: