使用Python进行网络抓取

2025年8月28日 | 11 分钟阅读

什么是 Web 抓取?

网络爬虫是一种从多个网站提取大量数据的技术。术语“爬取”指的是从另一个来源(网页)获取信息并将其保存到本地文件中。例如:假设你正在开发一个名为“手机比较网站”的项目,你需要手机的价格、评分和型号名称来比较不同手机。如果你通过检查各种网站来收集这些细节,将会花费很多时间。在这种情况下,网络爬虫就扮演了重要角色,通过编写几行代码,你就可以得到想要的结果。

Web Scraping Using Python

网络爬虫以非结构化格式从网站提取数据。它有助于收集这些非结构化数据并将其转换为结构化形式。

初创公司更喜欢网络爬虫,因为它是一种廉价而有效的方式,可以在不与数据销售公司合作的情况下获取大量数据。

网络爬虫合法吗?

这里出现了一个问题:网络爬虫是否合法。答案是,如果合法使用,一些网站是允许的。网络爬虫只是一个工具,你可以用正确的方式使用它,也可以用错误的方式。

如果有人试图爬取非公开数据,那么网络爬虫就是非法的。非公开数据不是每个人都能访问的;如果你试图提取这类数据,那就违反了法律条款。

有几种工具可用于从网站爬取数据,例如:

  • Scrapping-bot
  • Scrapper API
  • Octoparse(八爪鱼)
  • Import.io
  • Webhose.io
  • Dexi.io
  • Outwit
  • Diffbot
  • Content Grabber
  • Mozenda
  • Web Scrapper Chrome 扩展程序

为什么需要网络爬虫?

Web Scraping Using Python

如上所述,网络爬虫用于从网站提取数据。但是我们应该知道如何使用这些原始数据。这些原始数据可以用于各个领域。让我们看看网络爬虫的用途:

  • 动态价格监控

它被广泛用于从多个在线购物网站收集数据,并比较产品价格,从而做出有利可图的定价决策。使用网络爬取的数据进行价格监控,使公司能够了解市场状况并实现动态定价。这确保了公司始终能超越竞争对手。

  • 市场调研

网络爬虫非常适合市场趋势分析。它可以帮助深入了解特定市场。大型组织需要大量数据,而网络爬虫提供的数据具有可靠性和准确性的保证。

  • 电子邮件收集

许多公司使用个人电子邮件数据进行电子邮件营销。他们可以针对特定的受众进行营销。

  • 新闻和内容监控

一个新闻周期可能会对你的业务产生巨大影响或构成真正威胁。如果你的公司依赖于新闻分析,那么它会经常出现在新闻中。因此,网络爬虫为监控和解析最关键的报道提供了终极解决方案。新闻文章和社交媒体平台可以直接影响股市。

  • 社交媒体爬取

网络爬虫在从Twitter、FacebookInstagram等社交媒体网站提取数据以发现热门话题方面发挥着重要作用。

  • 研发

大量的数据集,如一般信息、统计数据和温度,都是从网站上爬取的,这些数据经过分析后用于进行调查或研发。

为什么使用 Python 进行网络爬虫?

还有其他流行的编程语言,但我们为什么选择 Python 而不是其他编程语言来进行网络爬虫呢?下面我们描述了 Python 的一些特性,这些特性使其成为最适合网络爬虫的编程语言。

  • 动态类型

在 Python 中,我们不需要为变量定义数据类型;我们可以直接在需要的地方使用变量。这节省了时间,使任务更快。Python 定义了自己的类来识别变量的数据类型。

  • 庞大的库集合

Python 附带了广泛的库,如 NumPy、Matplotlib、Pandas、Scipy 等,这些库为处理各种目的提供了灵活性。它几乎适用于所有新兴领域,也适用于网络爬虫以提取数据和进行操作。

  • 代码量少

网络爬虫的目的是节省时间。但如果你花更多时间在编写代码上呢?这就是我们使用 Python 的原因,因为它可以用几行代码完成任务。

  • 开源社区

Python 是开源的,这意味着每个人都可以免费使用它。它拥有全球最大的社区之一,如果你在 Python 代码中遇到任何问题,都可以在那里寻求帮助。

网络爬虫的基础知识

网络爬虫由两部分组成:网络爬行器和网络抓取器。简单来说,网络爬行器是马,抓取器是战车。爬行器引导抓取器并提取请求的数据。让我们来了解一下网络爬虫的这两个组件。

  • 爬行器

使用 Python 进行网络爬虫 网络爬行器通常被称为“蜘蛛”。它是一种人工智能技术,通过给定的链接浏览互联网以索引和搜索内容。它会搜索程序员要求的相关信息。

  • 抓取器

使用 Python 进行网络爬虫 网络抓取器是一种专用工具,旨在快速有效地从多个网站提取数据。网络抓取器的设计和复杂性因项目而异,差异很大。

网络爬虫是如何工作的?

以下是执行网络爬虫的步骤。让我们了解网络爬虫的工作原理。

步骤1:找到你想要爬取的URL

首先,你应该根据你的项目了解数据需求。一个网页或网站包含大量信息。因此,只爬取相关信息。简单来说,开发者应该熟悉数据需求。

步骤2:检查页面

数据以原始的 HTML 格式提取,必须仔细解析并减少原始数据中的噪音。在某些情况下,数据可能像姓名和地址一样简单,也可能像高维度的天气和股市数据一样复杂。

步骤3:编写代码

编写代码来提取信息,提供相关信息,并运行代码。

步骤4:将数据存储在文件中

将该信息存储在所需的 csv、xmlJSON 文件格式中。

开始使用网络爬虫

Python 拥有庞大的库集合,也为网络爬虫提供了非常有用的库。让我们了解一下 Python 所需的库。

用于网络爬虫的库

  • Selenium- Selenium 是一个开源的自动化测试库。它用于检查浏览器活动。要安装此库,请在终端中键入以下命令。

注意 - 最好使用 PyCharm IDE。

Web Scraping Using Python
  • Pandas

Pandas 库用于数据操作和分析。它用于提取数据并以所需格式存储。

  • BeautifulSoup
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据。它主要为网络爬虫而设计。它与解析器一起工作,提供一种自然的方式来导航、搜索和修改解析树。BeautifulSoup 的最新版本是 4.8.1。

 

让我们详细了解 BeautifulSoup 库。

安装 BeautifulSoup

你可以通过输入以下命令来安装 BeautifulSoup:

安装解析器

BeautifulSoup 支持 HTML 解析器和几个第三方 Python 解析器。你可以根据你的依赖关系安装其中任何一个。BeautifulSoup 的解析器列表如下:

解析器典型用法
Python 的 html.parserBeautifulSoup(markup,"html.parser")
lxml 的 HTML 解析器BeautifulSoup(markup,"lxml")
lxml 的 XML 解析器BeautifulSoup(markup,"lxml-xml")
Html5libBeautifulSoup(markup,"html5lib")

我们建议您安装 html5lib 解析器,因为它更适合新版本的 Python,或者您也可以安装 lxml 解析器。

在您的终端中输入以下命令:


Web Scraping Using Python

BeautifulSoup 用于将复杂的 HTML 文档转换为复杂的 Python 对象树。但有几种最常用的基本对象类型:

  • 标签

Tag 对象对应于原始 XML 或 HTML 文档中的标签。

输出

<class "bs4.element.Tag">

Tag 包含许多属性和方法,但一个标签最重要的特性是它的名称和属性。

  • 名称

每个标签都有一个名称,可通过 .name 访问:

  • 属性

一个标签可以有任意数量的属性。标签 <b id = "boldest"> 有一个属性 "id",其值为 "boldest"。我们可以通过将标签视为字典来访问其属性。

我们可以添加、删除和修改标签的属性。这可以通过将标签用作字典来完成。

  • 多值属性

在 HTML5 中,有些属性可以有多个值。class(包含多个 css 类)是最常见的多值属性。其他属性包括 rel、rev、accept-charset、headersaccesskey

  • NavigableString

在 BeautifulSoup 中,字符串指的是标签内的文本。BeautifulSoup 使用 NavigableString 类来包含这些文本片段。

字符串是不可变的,意味着它不能被编辑。但它可以用 replace_with() 替换为另一个字符串。

在某些情况下,如果你想在 BeautifulSoup 之外使用 NavigableStringunicode() 可以帮助将其转换为普通的 Python Unicode 字符串。

  • BeautifulSoup 对象

BeautifulSoup 对象代表整个解析后的文档。在许多情况下,我们可以将其用作 Tag 对象。这意味着它支持在导航树和搜索树中描述的大多数方法。

输出

?xml version="1.0" encoding="utf-8"?>
# <document><content/><footer>Here's the footer</footer></document>

网络爬虫示例

让我们通过一个示例来实际理解爬虫,即从网页中提取数据并检查整个页面。

首先,在维基百科上打开你喜欢的页面并检查整个页面,在从网页提取数据之前,你应该确保你的需求。考虑以下代码:

输出

The object type <class 'requests.models.Response'>
Convert the object into: <class 'bs4.BeautifulSoup'>

在下面的代码行中,我们通过类名提取网页的所有标题。在这里,前端知识在检查网页方面起着至关重要的作用。

输出

Overview,Machine learning tasks,History and relationships to other fields,Relation to data mining,Relation to optimization,Relation to statistics, Theory,Approaches,Types of learning algorithms,Supervised learning,Unsupervised learning,Reinforcement learning,Self-learning,Feature learning,Sparse dictionary learning,Anomaly detection,Association rules,Models,Artificial neural networks,Decision trees,Support vector machines,Regression analysis,Bayesian networks,Genetic algorithms,Training models,Federated learning,Applications,Limitations,Bias,Model assessments,Ethics,Software,Free and open-source software,Proprietary software with free and open-source editions,Proprietary software,Journals,Conferences,See also,References,Further reading,External links,

在上面的代码中,我们导入了 bs4requests 库。在第三行,我们创建了一个 res 对象来向网页发送请求。你可以观察到我们已经从网页中提取了所有标题。

Web Scraping Using Python

维基百科学习页面

让我们看另一个例子;我们将向 URL 发出 GET 请求,并使用 BeautifulSoup 和 Python 内置的 "html5lib" 解析器创建一个解析树对象 (soup)。

在这里,我们将爬取给定链接 () 的网页。请看以下代码:

以上代码将显示 javatpoint 主页的所有 html 代码。

使用 BeautifulSoup 对象,即 soup,我们可以收集所需的数据表。让我们使用 soup 对象打印一些有趣的信息。

  • 让我们打印网页的标题。

输出: 它会给出如下输出

<title>Tutorials List - Javatpoint</title>
  • 在上面的输出中,标题包含了 HTML 标签。如果你想要不带标签的文本,可以使用以下代码:

输出: 它会给出如下输出

Tutorials List - Javatpoint
  • 我们可以获取页面上的所有链接及其属性,例如 href、title 及其内部文本。请看以下代码:

输出: 它将打印所有链接及其属性。这里我们只显示其中一部分:

href is: https://#/javatpoint
Inner Text is: 
The title is: None
href is: https://twitter.com/pagejavatpoint
Inner Text is: 
The title is: None
href is: https://www.youtube.com/channel/UCUnYvQVCrJoFWZhKK3O2xLg
Inner Text is: 
The title is: None
href is: https://javatpoint.blogspot.com
Inner Text is: Learn Java
Title is: None
href is: java-tutorial
Inner Text is: Learn Data Structures
Title is: None
href is: data-structure-tutorial
Inner Text is: Learn C Programming
Title is: None
href is: c-programming-language-tutorial
Inner Text is: Learn C++ Tutorial

演示:从 Flipkart 网站爬取数据

在这个例子中,我们将从 Flipkart(一个流行的电子商务网站)上爬取手机的价格、评分和型号名称。完成此任务需要以下先决条件:

前提条件

  • Python 2.x 或 Python 3.x,并安装了 Selenium、BeautifulSoup、Pandas 库。
  • Google Chrome 浏览器
  • 爬虫解析器,如 html.parser、lxml 等。

步骤 - 1:找到要爬取的目标 URL

第一步是找到你想要爬取的 URL。这里我们要从 Flipkart 提取手机的详细信息。该页面的 URL 是 https://www.flipkart.com/search?q=iphones&otracker=search&otracker1=search&marketplace=FLIPKART&as-show=on&as=off。

步骤 - 2:检查页面

仔细检查页面是必要的,因为数据通常包含在标签内。所以我们需要检查以选择所需标签。要检查页面,请右键单击元素并点击“检查”

步骤 - 3:找到要提取的数据

分别提取包含在 "div" 标签中的价格、名称和评分。

步骤 - 4:编写代码

输出

Web Scraping Using Python

我们爬取了 iPhone 的详细信息,并将这些信息保存在 CSV 文件中,正如你在输出中看到的那样。在上面的代码中,我们为了测试目的注释了几行代码。你可以移除这些注释并观察输出。

在本教程中,我们讨论了网络爬虫的所有基本概念,并描述了从领先的在线电子商务网站 Flipkart 进行爬取的示例。


下一个主题Python Itertools