使用 Python 抓取你的第一个网页
介绍
网站上的数据已成为许多组织非常丰富的信息来源,而获取这些数据的方式就是“抓取”。网页抓取是一项容易上手的技能,也是每个开发人员工具箱中的宝贵工具。在本指南中,您将学习如何使用 Python 抓取您的第一个网站。
在浏览器中打开网页既快捷又简单,但浏览器在幕后做了很多工作。它从网络服务器获取数据,解析数据,然后向我们显示页面 - 这是三个独立的操作。当我们进行网络抓取时,我们大多只做前两个操作:获取数据,然后解析数据。获取数据涉及连接到网络服务器、请求特定文件(通常是 HTML),然后下载该文件。解析是用于检查我们下载的文件并从中提取信息的技术。
要求
在本指南中,我们将使用 Python 的“Requests”库来获取数据,并使用“Lxml”库来解析我们下载的 HTML。这些库使用起来非常简单,适用于大多数网页抓取目的。
先决条件:
一般来说,一旦正确安装了 Python 3,您就可以使用“PIP”实用程序下载 Lxml 和 Requests:
pip install requests
pip install lxml
如果没有安装Pip,可以在这里下载并安装:https://pypi.org/project/pip/
对于简单的网页抓取,像 Microsoft Visual Code(免费使用和下载)这样的交互式编辑器是一个不错的选择,它适用于 Windows、Linux 和 Mac。
我们要抓取的第一个网页
我们将要测试我们技能的网页是一个用于网页抓取学习目的的演示网页。
该网页是一本书的产品列表。它包含书名作为主标题,书名下方是书的作者,书名下方是一个简单的表格。表格内有两个单元格,第一个单元格包含书的封面图片,第二个单元格包含书的内容描述。结合有用的产品详细信息,这些单元格可用于帮助您购买书籍。
该页面使用非常基本的 HTML,没有外部 CSS 样式;因此,它是一个很好的入门示例。您可以在下图中看到网页源 HTML 代码与上面呈现的网页之间的关系。
入门
我们将首先创建一个新的 python 文件。与其他语言一样,由于我们使用外部库,因此我们需要使用 import 指令将它们导入到文件中。这里我们导入了 lxml 和请求。
from lxml import html, etree
import requests
要下载页面,我们只需要求请求库“获取”它。因此,我们为示例声明一个名为“page”的变量,并将调用“get”的结果加载到此变量中。
page = requests.get("http://www.howtowebscrape.com/examples/simplescrape1.html")
变量page有几个属性 - 本指南中我们感兴趣的是“content”。此属性包含我们正在下载的页面的原始 HTML,并以字符串格式显示。我们可以将其打印出来以查看我们收到的内容:
print(page.content)
在原始阶段,我们刚刚收到的内容如下所示:
我们可以在那里看到 HTML 标签,但我们还有额外的“噪音”,在本例中,它由转义字符 (\r \n) 组成,表示原始源中的换行符。理论上就是这样,我们已经完成了网络抓取的第一阶段 - 虽然还有很多事情要做,但请求库使得只需发出“GET”命令即可轻松下载网页源 HTML。
提取数据
一旦我们获得了所需的原始数据,我们便可以使用解析库通过解析方法从这些数据中提取信息。由于我们拥有的原始数据是 XML 格式,因此我们可以使用 lxml 库帮助将其解压为更易于使用的 XML。XML 是结构化的,因此我们将使用“html.fromstring”函数将单个大内容字符串转换为变量“extractedHtml” ——这会消除我们不想要的噪音,并将数据显示为易于访问的 HTML。
extractedHtml = html.fromstring(page.content)
解析过程的最后一部分是确定我们需要的数据在 XML 结构本身中实际位于何处。由于 XML 由一系列节点组成,我们可以使用 XPath 语法来识别我们要提取的数据的“路径”。例如,书名包含在 HTML 文件中的第一个“h1”标记中,因此我们可以使用显示从文档顶部到 h1 节点本身的路径的路径来提取它:
让我们看看实际效果——代码如下:
extractedHtml = html.fromstring(page.content)
bookTitle = extractedHtml.xpath("/html/body/center/h1")
print(bookTitle[0].text)
输出:
Grokking Algorithms: An illustrated guide for programmers and other curious people
是的,就这么简单!
对于解析,大多数情况下,您可以使用 XPath 语法从网页源中定位和提取数据。您可以在此处了解有关 XPath 的更多信息以及它的强大功能。
现在让我们通过提取我们需要的有关这本书的所有信息来完成。
bookTitle = extractedHtml.xpath("/html/body/center/h1")
author = extractedHtml.xpath("//span[@id='author']")
image = extractedHtml.xpath("//img/@src")
bookData = extractedHtml.xpath("/html/body/center/table/tr/td[2]")
结论
网络抓取是一项重要的技能,尤其是对于处理数据的开发人员以及商业智能和数据科学专业人士而言。本指南快速介绍了基础知识。如果您想了解有关该主题的更多信息,请考虑 Pluralsight 提供的以下课程:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~