如何使用Python抓取网页数据,最好的网页抓取Python库

探索一系列用于网页抓取的强大 Python 库,包括用于 HTTP 请求、解析 HTML/XML 和自动浏览的库。

网络抓取已成为当今数据驱动世界中不可或缺的工具。Python 是最流行的抓取语言之一,拥有一个由强大的库和框架组成的庞大生态系统。在本文中,我们将探索用于网络抓取的最佳Python 库,每个库都提供独特的特性和功能来简化从网站提取数据的过程。

本文还将介绍最佳库和最佳实践,以确保高效和负责任的网络抓取。从尊重网站政策和处理率限制到解决常见挑战,我们将提供宝贵的见解,帮助您有效地驾驭网络抓取的世界。

Scrape-It.Cloud

让我们从 Scrape-It.Cloud 库开始,它提供了对用于抓取数据的API 的访问。该解决方案有几个优点。例如,我们通过中介来完成此操作,而不是直接从目标网站抓取数据。这保证了我们在抓取大量数据时不会被阻止,因此我们不需要代理。我们不必解决验证码问题,因为 API 会处理这个问题。此外,我们可以抓取静态页面和动态页面。

特征

借助 Scrape-It.Cloud 库,您可以通过简单的 API 调用轻松从任何站点提取有价值的数据。它解决了代理服务器、无头浏览器和验证码解决服务的问题。 

通过指定正确的 URL,Scrape-It.Cloud 可以快速返回包含必要数据的 JSON。这使您可以专注于提取正确的数据,而不必担心数据被阻止。

此外,此 API 允许您从使用 React、AngularJS、Ajax、Vue.js 和其他流行库创建的动态页面中提取数据。

此外,如果您需要从 Google SERP 收集数据,您还可以将此 API 密钥用于serp api python库。

安装

要安装该库,请运行以下命令:

pip install scrapeit-cloud

要使用该库,您还需要一个 API 密钥。您可以通过在网站上注册来获取它。此外,您还将获得一些免费积分来免费提出请求并探索图书馆的功能。

使用示例

对特定库的所有功能、特性和使用方法的详细描述值得单独撰写一篇文章。现在,我们将仅向您展示如何获取任何网页的 HTML 代码,无论您是否可以访问该网页、是否需要验证码解决方案以及页面内容是静态还是动态。

为此,只需指定您的 API 密钥和页面 URL。

from scrapeit_cloud import ScrapeitCloudClient
import json
client = ScrapeitCloudClient(api_key="YOUR-API-KEY")
response = client.scrape(
    params={
  "url": "https://example.com/"
}
)

由于结果采用 JSON 格式,并且页面的内容存储在 属性 中["scrapingResult"]["content"],因此我们将使用它来提取所需的数据。

data = json.loads(response.text)
print(data["scrapingResult"]["content"])

结果,检索到的页面的 HTML 代码将显示在屏幕上。

Requests 和 BeautifulSoup 组合

最简单和最流行的库之一是BeautifulSoup。但是,请记住,它是一个解析库,不具备自行发出请求的能力。因此,它通常与简单的请求库(如Requests、 http.client 或 cUrl )一起使用。 

特征

这个库是为初学者设计的,非常容易使用。此外,它还拥有详细记录的说明和活跃的社区。

BeautifulSoup库(或 BS4)是专门为解析而设计的,这赋予了它广泛的功能。您可以使用 XPath 和 CSS 选择器来抓取网页。

由于其简单性和活跃的社区,在线提供了大量其使用示例。此外,如果您在使用过程中遇到困难,您可以获得帮助来解决您的问题。

安装

如前所述,我们需要两个库来使用它。为了处理请求,我们将使用 Requests 库。好消息是它是预安装的,因此我们不需要单独安装它。但是,我们确实需要安装 BeautifulSoup 库才能使用它。为此,只需使用以下命令:

pip install beautifulsoup4

安装完成后,您可以立即开始使用它。

使用示例

假设我们想要检索<h1>包含标头的标签的内容。为此,我们首先需要导入必要的库并发出请求以获取页面的内容:

import requests
from bs4 import BeautifulSoup

data = requests.get('https://example.com')

为了处理页面,我们将使用 BS4 解析器:

soup = BeautifulSoup(data.text, "html.parser")

现在,我们所要做的就是指定我们想要从页面中提取的确切数据:

text = soup.find_all('h1')

最后,我们将获取到的数据显示在屏幕上:

print(text)

正如我们所看到的,使用该库非常简单。然而,它确实有其局限性。例如,它无法抓取动态数据,因为它是一个与基本请求库而不是无头浏览器一起使用的解析库。

LXML

LXML是另一个流行的数据解析库,它不能单独用于抓取。由于它还需要一个库来发出请求,因此我们将使用我们已经知道的熟悉的 Requests 库。 

特征

尽管它与以前的库相似,但它确实提供了一些附加功能。例如,它比 BS4 更擅长处理 XML 文档结构。虽然它还支持 HTML 文档,但如果您有更复杂的 XML 结构,该库将是更合适的选择。

安装

正如前面提到的,尽管需要请求库,但我们只需要安装 LXML 库,因为其他所需的组件已经预先安装。

要安装 LXML,请在命令提示符中输入以下命令:

pip install lxml

现在让我们继续看一下使用该库的示例。

使用示例

首先,就像上次一样,我们需要使用一个库来获取网页的 HTML 代码。这部分代码与前面的示例相同:

import requests
from lxml import html
data = requests.get('https://example.com')

现在我们需要将结果传递给解析器,以便它可以处理文档的结构:

tree = html.fromstring(data.content)

最后,剩下的就是为所需元素指定 CSS 选择器或 XPath,并将处理后的数据打印在屏幕上。让我们以 XPath 为例:

data = tree.xpath('//h1')
print(data)

结果,我们将得到与上一个示例相同的标题:

['Example Domain']

然而,尽管在简单的示例中可能不太明显,但 LXML 库对于初学者来说比前一个库更具挑战性。它还拥有较少记录的资源和不太活跃的社区。

因此,在处理难以使用其他方法处理的复杂 XML 结构时,建议使用 LXML。

Scrapy

与前面的示例不同,Scrapy不仅仅是一个库,而且是一个成熟的网络抓取框架。它不需要额外的库,并且是一个独立的解决方案。然而,对于初学者来说,这似乎相当具有挑战性。如果这是您的第一个网络抓取工具,那么值得考虑另一个库。

特征

尽管有其缺点,但该框架在某些情况下是非常宝贵的解决方案。例如,当您希望项目易于扩展时。或者,如果您需要在同一项目中使用多个具有相同设置的抓取工具,您只需使用一个命令即可一致运行,并将所有收集到的信息有效地组织成正确的格式。

使用 Scrapy 创建的单个抓取工具称为爬虫,可以是项目中唯一的一个爬虫,也可以是多个爬虫中的一个。该项目有自己的配置文件,适用于项目内的所有抓取工具。此外,每个蜘蛛都有自己的设置,这些设置将独立于整个项目的设置运行。  

安装

您可以像任何其他 Python 库一样通过在命令行中输入安装命令来安装此框架。

pip install scrapy

现在让我们继续讨论使用该框架的示例。

使用示例

与库示例不同,创建项目就像蜘蛛文件一样,是通过特殊命令完成的。必须在命令行中输入它。

首先,让我们创建一个新项目,在其中构建我们的抓取工具。使用以下命令:

scrapy startproject test_project

您可以输入test_project任何其他项目名称。现在我们可以导航到我们的项目文件夹或在此处创建一个新的蜘蛛。

在我们继续创建蜘蛛之前,让我们看一下项目树的结构。 

这里提到的文件是在创建新项目时自动生成的。这些文件中指定的任何设置都将应用于项目中的所有蜘蛛。您可以在“items.py”文件中定义公共类,在“pipelines.py”文件中指定项目启动时要执行的操作,并在“settings.py”文件中配置常规项目设置。

现在让我们回到命令行并导航到我们的项目文件夹:

cd test_project

之后,我们将在所需项目的文件夹中创建一个新的蜘蛛:

scrapy genspider example example.com

接下来,您可以打开蜘蛛文件并手动编辑它。该genspider命令创建一个框架,使您可以更轻松地构建抓取工具。要检索页面的标题,请转到蜘蛛文件并找到以下函数:

def parse(self, response):
    pass

替换pass为执行必要功能的代码。在我们的例子中,它涉及从标签中提取数据h1:

def parse(self, response):
    item = DemoItem()
    item["text"] = response.xpath("//h1").extract()
    return items

之后,您可以在项目中配置蜘蛛程序的执行并获取所需的数据。

Selemium

Selenium是一个非常方便的库,它不仅允许您提取数据和抓取简单的网页,还允许使用无头浏览器。这使得它适合抓取动态网页。因此,我们可以说 Selenium 是 Python 中最好的网页抓取库之一。

特征

Selenium 库最初是为了软件测试目的而开发的,这意味着它允许您有效地模仿真实用户的行为。此功能降低了网页抓取期间阻塞的风险。此外,Selenium 允许收集数据并在网页上执行必要的操作,例如身份验证或填写表单。

该库使用一个网络驱动程序来提供对这些功能的访问。您可以选择任何受支持的网络驱动程序,但 Firefox 和 Chrome 网络驱动程序是最受欢迎的。本文将以 Chrome Web 驱动程序为例。

安装

让我们从安装库开始:

pip install selenium

另外,如前所述,我们需要一个 Web 驱动程序来模拟真实用户的行为。我们只需要下载它并将其放在任意文件夹中即可使用。稍后我们将在代码中指定该文件夹的路径。

您可以从官方网站下载网络驱动程序。请记住,使用与您所安装的浏览器版本相对应的网络驱动程序版本非常重要。

使用示例

要使用 Selenium 库,请创建一个空的 *.py 文件并导入必要的库:

from selenium import webdriver
from selenium.webdriver.common.by import By

之后,让我们指定网络驱动程序的路径并定义我们将使用它:

DRIVER_PATH = 'C:\chromedriver.exe'
driver = webdriver.Chrome(executable_path=DRIVER_PATH)

在这里您还可以指定一些参数,例如操作模式。浏览器可以在活动模式下运行,您将在其中看到所有脚本的操作。或者,您可以选择无头模式,其中浏览器窗口被隐藏并且不向用户显示。默认情况下会显示浏览器窗口,因此我们无需更改任何内容。

现在我们已经完成了设置,让我们进入登陆页面:

driver.get("https://example.com/")

此时,网络驱动程序将启动,您的脚本将自动转到所需的网页。现在我们只需指定要检索的数据、显示检索到的数据并关闭 Web 驱动程序:

text = driver.find_elements(By.CSS_SELECTOR, "h1")
print(text)
driver.close()

重要的是不要忘记在脚本执行结束时关闭 Web 驱动程序。否则,它将保持打开状态直到脚本完成,这可能会严重影响电脑的性能。 

Pyppeteer

我们将在文章中讨论的最后一个库是Pyppeteer。它是一个名为 Puppeteer 的流行库的 Python 版本,常用于 NodeJS。Pyppeteer 拥有充满活力的社区和详细的文档,但不幸的是,其中大部分都集中在 NodeJS 上。因此,如果您决定使用这个库,请务必记住这一点。 

特征

如前所述,这个库最初是为 NodeJS 开发的。它还允许您使用无头浏览器,这使得它对于抓取动态网页非常有用。

安装

要安装该库,请转到命令行并输入命令:

pip install pyppeteer

通常,该库与asyncio库一起使用,可以提高脚本性能和执行速度。那么,我们也来安装它:

pip install asyncio

除此之外,我们不需要任何其他东西。 

使用示例

让我们看一个使用 Pyppeteer 库的简单示例。我们将创建一个新的 Python 文件并导入必要的库来执行此操作。

import asyncio
from pyppeteer import launch

现在,让我们执行与上一个示例相同的操作:导航到页面,收集数据,将其显示在屏幕上,然后关闭浏览器。

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://example.com')
    text = await page.querySelectorAll("h1.text")
    print(await text.getProperty("textContent"))
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

由于这个库与 Puppeteer 类似,初学者可能会觉得有些挑战性。

最佳实践和注意事项

为了使网络抓取更加高效,需要遵循一些规则。遵守这些规则有助于使您的抓取工具更加有效和道德,并减少您从中收集信息的服务的负载。 

避免过多的请求

在网络抓取过程中,避免过多的请求对于防止被阻止并减少目标网站的负载非常重要。这就是为什么建议在最不繁忙的时间(例如晚上)从网站收集数据。这有助于降低资源过载并导致其故障的风险。 

处理动态内容

在收集动态数据的过程中,有两种方法。您可以使用支持无头浏览器的库自行进行抓取。或者,您可以使用网络抓取 API,该 API 将为您处理收集动态数据的任务。

如果您有良好的编程技能和一个小项目,那么使用库编写自己的抓取工具可能会更好。但是,如果您是初学者或需要从多个页面收集数据,则网络抓取 API 会更好。在这种情况下,除了收集动态数据之外,API 还将负责代理和解决验证码,例如scrape it cloud serp api。

用户代理轮换

同样重要的是要考虑到您的机器人在不使用用户代理的情况下也会引人注目。每个浏览器在访问网页时都有自己的用户代理,您可以在开发者控制台的 DevTools 选项卡下查看它。建议为每个请求随机更改用户代理值。

代理使用和 IP 轮换

正如我们之前讨论过的,抓取时存在被阻止的风险。为了降低这种风险,建议使用隐藏真实 IP 地址的代理。

然而,只有一个代理是不够的。最好有轮换代理,尽管它们的成本较高。

结论和要点

本文讨论了用于网页抓取的库和以下规则。总而言之,我们创建了一个表格并比较了我们涵盖的所有库。

下面的比较表重点介绍了用于网页抓取的 Python 库的一些关键功能:

图书馆

解析能力

高级功能

JS渲染

使用方便

Scrape-It.Cloud

HTML、XML、JavaScript

自动抓取和分页

是的 

简单的

Requests 和 BeautifulSoup 组合

HTML、XML

简单集成

简单的

Requests 和 LXML 组合

HTML、XML

XPath 和 CSS 选择器支持

缓和

Scrapy

HTML、XML

多个蜘蛛

缓和

Selenium

HTML、XML、JavaScript

动态内容处理

是(使用网络驱动程序)

缓和

Pyppeteer

HTML、JavaScript

使用无头 Chrome 或 Chromium 进行浏览器自动化

是的

缓和

总的来说,Python 是一种非常有用的数据收集编程语言。凭借其广泛的工具和用户友好的性质,它通常用于数据挖掘和分析。Python 可以轻松完成与从网站提取信息和处理数据相关的任务。


文章来源地址https://www.toymoban.com/diary/python/310.html


到此这篇关于如何使用Python抓取网页数据,最好的网页抓取Python库的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/python/310.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
使用WeasyPrint将HTML转换为Python PDF生成
上一篇 2023年08月30日 09:42
下一篇 2023年09月05日 09:59

相关文章

  • 如何使用 Python 爬虫抓取动态网页数据

    随着 Web 技术的不断发展,越来越多的网站采用了动态网页技术,这使得传统的静态网页爬虫变得无能为力。本文将介绍如何使用 Python 爬虫抓取动态网页数据,包括分析动态网页、模拟用户行为、使用 Selenium 等技术。 在进行动态网页爬取之前,我们需要先了解动态网页和静

    2023年04月24日
    浏览(69)
  • 如何使用Python的Selenium库进行网页抓取和JSON解析

    随着互联网的快速发展,网页抓取和数据解析在许多行业中变得越来越重要。无论是电子商务、金融、社交媒体还是市场调研,都需要从网页中获取数据并进行分析。Python的Selenium库作为一种自动化测试工具,已经成为许多开发者的首选,因为它提供了强大的功能和灵活性。

    2024年02月10日
    浏览(282)
  • 快乐学Python,如何使用爬虫从网页中提取感兴趣的内容?

    前面的内容,我们了解了使用urllib3和selenium来下载网页,但下载下来的是整个网页的内容,那我们又怎么从下载下来的网页中提取我们自己感兴趣的内容呢?这里就需要Python的另一个库来实现-BeautifulSoup。 BeautifulSoup 是一个 Python 库,用于分析 HTML。它和它的名字一样,用起来

    2024年01月18日
    浏览(43)
  • 『爬虫四步走』手把手教你使用Python抓取并存储网页数据!

    爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,**本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程。**如果你还在入门爬虫阶段或者不清楚爬虫的具体工作流程,那么应该仔细阅读本文! 第一步:

    2024年02月04日
    浏览(64)
  • 用UiPath实现网页抓取——表格数据提取-1-单击选择分类-ISO标准化-01-综合、术语、标准化、文献目录获取

    准备获取目录的链接是 全国标准信息公告服务平台链接: https://std.samr.gov.cn/search/iso?tid=q= 第一步,标注啊类型选择——ISO 第二步,标准化状态选择——现行 第三步,ICS分类选择——01_综合、术语标准化、文献 将数据分别复制到excel文件中,如下图。 由于国际标准分类号在

    2024年02月04日
    浏览(55)
  • 如何抓取网页数据

    如何抓取网页数据,每当我们在网上找到自己想到的数据,都需要复制粘贴或下载然后一步一步地整理。 今天教大家如何快速地免费获取网页数据信息,只需要输入域名点选你需要的数据,软件全自动抓取。支持导出各种格式并且已整理归类。详细参考图片教程。 SEO是一种

    2023年04月15日
    浏览(49)
  • 使用Python和Selenium抓取网页内容

    采集动态网页是困扰许多人的难题,不妨使用 Python 和 Selenium抓取网页数据。 微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩 你是否对从网站提取数据感兴趣,但发现自己被网络抓取的复杂性所困扰?不要害怕,我们在这篇文章中将展示如何利用 Selenium 和

    2024年02月07日
    浏览(65)
  • Python网页抓取- python selenium使用方法和代码示例

    Selenium可以模拟网页操作,抓取页面内容,主要通过webdriver模块实现,为了方便理解,按照实例的操作步骤逐一介绍(函数参数不具体展开,参考下面代码实例即可理解): 获取browser实例 通过webdriver.Chorme(), webdriver.Edge(), webdriver.Firefox(), 来获取browser实例: browser = webdriver.C

    2024年01月23日
    浏览(67)
  • 小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)

    jS动态生成,由于呈现在网页上的内容是由JS生成而来,我们能够在浏览器上看得到,但是在HTML源码中却发现不了        如果不加,如果网站有防爬技术,比如频繁访问,后面你会发现什么数据都取不到 User-Agent获取地方:  网页获取位置: 使用代理IP解决反爬。(免费代理

    2024年02月01日
    浏览(87)
  • 简单的用Python抓取动态网页数据,实现可视化数据分析

    一眨眼明天就周末了,一周过的真快! 今天咱们用Python来实现一下动态网页数据的抓取 最近不是有消息说世界首富马上要变成中国人了吗,这要真成了,可就是历史上首位中国世界首富了! 那我们就以富豪排行榜为例,爬取一下2023年国内富豪五百强,最后实现一下可视化分

    2024年02月05日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包