使用Python进行网络抓取2025年8月28日 | 11 分钟阅读 什么是 Web 抓取?网络爬虫是一种从多个网站提取大量数据的技术。术语“爬取”指的是从另一个来源(网页)获取信息并将其保存到本地文件中。例如:假设你正在开发一个名为“手机比较网站”的项目,你需要手机的价格、评分和型号名称来比较不同手机。如果你通过检查各种网站来收集这些细节,将会花费很多时间。在这种情况下,网络爬虫就扮演了重要角色,通过编写几行代码,你就可以得到想要的结果。 ![]() 网络爬虫以非结构化格式从网站提取数据。它有助于收集这些非结构化数据并将其转换为结构化形式。 初创公司更喜欢网络爬虫,因为它是一种廉价而有效的方式,可以在不与数据销售公司合作的情况下获取大量数据。 网络爬虫合法吗?这里出现了一个问题:网络爬虫是否合法。答案是,如果合法使用,一些网站是允许的。网络爬虫只是一个工具,你可以用正确的方式使用它,也可以用错误的方式。 如果有人试图爬取非公开数据,那么网络爬虫就是非法的。非公开数据不是每个人都能访问的;如果你试图提取这类数据,那就违反了法律条款。 有几种工具可用于从网站爬取数据,例如:
为什么需要网络爬虫?![]() 如上所述,网络爬虫用于从网站提取数据。但是我们应该知道如何使用这些原始数据。这些原始数据可以用于各个领域。让我们看看网络爬虫的用途:
它被广泛用于从多个在线购物网站收集数据,并比较产品价格,从而做出有利可图的定价决策。使用网络爬取的数据进行价格监控,使公司能够了解市场状况并实现动态定价。这确保了公司始终能超越竞争对手。
网络爬虫非常适合市场趋势分析。它可以帮助深入了解特定市场。大型组织需要大量数据,而网络爬虫提供的数据具有可靠性和准确性的保证。
许多公司使用个人电子邮件数据进行电子邮件营销。他们可以针对特定的受众进行营销。
一个新闻周期可能会对你的业务产生巨大影响或构成真正威胁。如果你的公司依赖于新闻分析,那么它会经常出现在新闻中。因此,网络爬虫为监控和解析最关键的报道提供了终极解决方案。新闻文章和社交媒体平台可以直接影响股市。
网络爬虫在从Twitter、Facebook和Instagram等社交媒体网站提取数据以发现热门话题方面发挥着重要作用。
大量的数据集,如一般信息、统计数据和温度,都是从网站上爬取的,这些数据经过分析后用于进行调查或研发。 为什么使用 Python 进行网络爬虫?还有其他流行的编程语言,但我们为什么选择 Python 而不是其他编程语言来进行网络爬虫呢?下面我们描述了 Python 的一些特性,这些特性使其成为最适合网络爬虫的编程语言。
在 Python 中,我们不需要为变量定义数据类型;我们可以直接在需要的地方使用变量。这节省了时间,使任务更快。Python 定义了自己的类来识别变量的数据类型。
Python 附带了广泛的库,如 NumPy、Matplotlib、Pandas、Scipy 等,这些库为处理各种目的提供了灵活性。它几乎适用于所有新兴领域,也适用于网络爬虫以提取数据和进行操作。
网络爬虫的目的是节省时间。但如果你花更多时间在编写代码上呢?这就是我们使用 Python 的原因,因为它可以用几行代码完成任务。
Python 是开源的,这意味着每个人都可以免费使用它。它拥有全球最大的社区之一,如果你在 Python 代码中遇到任何问题,都可以在那里寻求帮助。 网络爬虫的基础知识网络爬虫由两部分组成:网络爬行器和网络抓取器。简单来说,网络爬行器是马,抓取器是战车。爬行器引导抓取器并提取请求的数据。让我们来了解一下网络爬虫的这两个组件。
网络爬虫是如何工作的?以下是执行网络爬虫的步骤。让我们了解网络爬虫的工作原理。 步骤1:找到你想要爬取的URL 首先,你应该根据你的项目了解数据需求。一个网页或网站包含大量信息。因此,只爬取相关信息。简单来说,开发者应该熟悉数据需求。 步骤2:检查页面 数据以原始的 HTML 格式提取,必须仔细解析并减少原始数据中的噪音。在某些情况下,数据可能像姓名和地址一样简单,也可能像高维度的天气和股市数据一样复杂。 步骤3:编写代码 编写代码来提取信息,提供相关信息,并运行代码。 步骤4:将数据存储在文件中 将该信息存储在所需的 csv、xml、JSON 文件格式中。 开始使用网络爬虫Python 拥有庞大的库集合,也为网络爬虫提供了非常有用的库。让我们了解一下 Python 所需的库。 用于网络爬虫的库
注意 - 最好使用 PyCharm IDE。![]()
Pandas 库用于数据操作和分析。它用于提取数据并以所需格式存储。
让我们详细了解 BeautifulSoup 库。 安装 BeautifulSoup 你可以通过输入以下命令来安装 BeautifulSoup: 安装解析器 BeautifulSoup 支持 HTML 解析器和几个第三方 Python 解析器。你可以根据你的依赖关系安装其中任何一个。BeautifulSoup 的解析器列表如下:
我们建议您安装 html5lib 解析器,因为它更适合新版本的 Python,或者您也可以安装 lxml 解析器。 在您的终端中输入以下命令: ![]() BeautifulSoup 用于将复杂的 HTML 文档转换为复杂的 Python 对象树。但有几种最常用的基本对象类型:
Tag 对象对应于原始 XML 或 HTML 文档中的标签。 输出 <class "bs4.element.Tag"> Tag 包含许多属性和方法,但一个标签最重要的特性是它的名称和属性。
每个标签都有一个名称,可通过 .name 访问:
一个标签可以有任意数量的属性。标签 <b id = "boldest"> 有一个属性 "id",其值为 "boldest"。我们可以通过将标签视为字典来访问其属性。 我们可以添加、删除和修改标签的属性。这可以通过将标签用作字典来完成。
在 HTML5 中,有些属性可以有多个值。class(包含多个 css 类)是最常见的多值属性。其他属性包括 rel、rev、accept-charset、headers 和 accesskey。
在 BeautifulSoup 中,字符串指的是标签内的文本。BeautifulSoup 使用 NavigableString 类来包含这些文本片段。 字符串是不可变的,意味着它不能被编辑。但它可以用 replace_with() 替换为另一个字符串。 在某些情况下,如果你想在 BeautifulSoup 之外使用 NavigableString,unicode() 可以帮助将其转换为普通的 Python Unicode 字符串。
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, 在上面的代码中,我们导入了 bs4 和 requests 库。在第三行,我们创建了一个 res 对象来向网页发送请求。你可以观察到我们已经从网页中提取了所有标题。 ![]() 维基百科学习页面 让我们看另一个例子;我们将向 URL 发出 GET 请求,并使用 BeautifulSoup 和 Python 内置的 "html5lib" 解析器创建一个解析树对象 (soup)。 在这里,我们将爬取给定链接 () 的网页。请看以下代码: 以上代码将显示 javatpoint 主页的所有 html 代码。 使用 BeautifulSoup 对象,即 soup,我们可以收集所需的数据表。让我们使用 soup 对象打印一些有趣的信息。
输出: 它会给出如下输出 <title>Tutorials List - Javatpoint</title>
输出: 它会给出如下输出 Tutorials List - Javatpoint
输出: 它将打印所有链接及其属性。这里我们只显示其中一部分: 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(一个流行的电子商务网站)上爬取手机的价格、评分和型号名称。完成此任务需要以下先决条件: 前提条件
步骤 - 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:编写代码 输出 ![]() 我们爬取了 iPhone 的详细信息,并将这些信息保存在 CSV 文件中,正如你在输出中看到的那样。在上面的代码中,我们为了测试目的注释了几行代码。你可以移除这些注释并观察输出。 在本教程中,我们讨论了网络爬虫的所有基本概念,并描述了从领先的在线电子商务网站 Flipkart 进行爬取的示例。 下一个主题Python Itertools |
我们请求您订阅我们的新闻通讯以获取最新更新。