关于Python爬虫的一些总结

发布时间 2023-04-10 11:27:07作者: 华科爬虫

作为一名资深的爬虫工程师来说,把别人公开的一些合法数据通过爬虫手段实现汇总收集是一件很有成就的事情,其实这只是一种技术。

初始爬虫

问题:

什么是爬虫?

网络爬虫是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。

爬虫有什么用?

① 网络数据采集

② 大数据分析

③ 网页分析

什么工作原理?

首先来看网页特征

1、HTML 描绘网页信息

HTML是一种标记语言,用标签标记内容并加以解析和区分。

浏览器的功能是将获取到的HTML代码进行解析,然后将原始的代码转变成我们直接看到的网站页面。

2、使用 HTTP / HTTPS传输协议

3、唯一的地址路径 URL

所以我们可以拿到 URL,通过使用 HTTP / HTTPS传输协议来获取整个 HTML 页面,然后解析整个 HTML 就可以得到 HTML 中的数据

那么对于一个程序员来说就是:

1、拿到要爬取的URL

2、发送 Request 请求

① 设置请求方式:GET、POST
② 请求的URL
③ 请求头
④ 请求体

3、获取 Response 数据

① 响应状态:ResponseCode
② 响应头:ResponseHeader
③ 响应体:ResponseBody

4、数据解析

① 直接返回
② json、xml解析
③ 正则表达式
④ BeautifulSoup
⑤ Xpath
⑥ Lxml
⑦ html6lib

5、数据存储

① json、xml、txt直接保存
② MySQL、SQL Server
③ MongoDB、Redis、Excel
④ file类型:image、video、mp3等等

爬虫战斗

数据解析 BeautifulSoup 和 Lxml

Beautiful Soup

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

Lxml

Lxml是一个Python库,使用它可以轻松处理XML和HTML文件,还可以用于web爬取。市面上有很多现成的XML解析器,但是为了获得更好的结果,开发人员有时更愿意编写自己的XML和HTML解析器。这时lxml库就派上用场了。这个库的主要优点是易于使用,在解析大型文档时速度非常快,归档的也非常好,并且提供了简单的转换方法来将数据转换为Python数据类型,从而使文件操作更容易。

Beautiful Soup 和 Lxml 对比

两个我都尝试过 lxml比beautifulSoup速度更快,容错和处理能力更强,

还有另外一点lxml可以使用Xpath

所以我后面使用lxml

Beautiful Soup

pip3 install beautifulsoup4

Lxml安装

pip3 install lxml

Xpath语法

认识Xpath

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。

因此,对 XPath 的理解是很多高级 XML 应用的基础。

说白了 Xpath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

实例

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果: