Py学习  »  Python

2024年6个最佳 Python 网页爬虫库

蚂蚁学Python • 1 年前 • 895 次点击  

哪些 Python Web 抓取库好用?

一个好的网络抓取的 Python 库应该是快速的、可扩展的,并且能够抓取任何类型的网页。在本文中,我们将讨论六个最佳技术库、它们的优缺点,以及一些快速示例,以帮助您了解它们的工作原理。

什么是最好的 Python Web 抓取库

我做了一些测试来检查验证哪个 Python Web 抓取库能够方便地抓取网页,如下是列表:

1. Selenium.

2. Requests.

3. Beautiful Soup.

4. Playwright.

5. Scrapy.

6. urllib


1. Selenium

Selenium 是一个广泛使用的 Python 抓取库,用于抓取动态 Web 内容。它通过单击按钮、填写表格等来模仿人类交互。

Selenium 与许多浏览器兼容,例如 Chrome 和 Firefox,允许您选择最适合您的网络抓取项目的浏览器。这种灵活性有助于确保在不同的浏览器环境中获得一致的结果。

👍 优点: 它可以抓取动态网页。多浏览器支持。

👎 缺点:Selenium可能很慢。它无法获取状态代码。这既费时又费力。

要使用 selenium,请更新您的文件并粘贴以下代码:scraper.py

from selenium import webdriverfrom selenium.webdriver.common.by import By
url = "https://demo.vuestorefront.io/category/accessories/accessories-women/accessories-women-sunglasses/"
driver = webdriver.Chrome()driver.get(url)
items = driver.find_elements(By.CSS_SELECTOR, ".grid a[data-testid='link']")for item in items: print(item.text)

运行代码后,您应该会看到控制台上打印的四个项目的名称:

Sunglasses Spektre multiSunglasses Spektre brownSunglasses Spektre greySunglasses Spektre black


2. Requests

Requests 是一个用户友好的 Python 网络抓取库,建立在 urllib3 之上。它可以直接获取一个没有实例的 URL。此外,发出请求后,可以使用响应对象上的属性访问网页的内容。

它简化了发送 HTTP 请求和处理响应的过程,使开发人员更容易与 Web 服务和 API 进行交互。

👍 优点:

  • 速度很快

  • 这很容易理解。


👎 缺点:

  • 它无法使用 JavaScript 抓取交互式或动态网站。

  • 这对敏感信息不利,因为它可能会保留在浏览器的内存中。


如何使用请求抓取网页

让我们来看看 Vue 店面页面。页面上四个项目中每个项目的标题都包含在锚点标记中,这些标记将属性设置为类为 的元素内。data-testidlinkgrid

步骤 1:使用 GET 方法获取主要内容

使用以下代码:

import requests r = requests.get('https://demo.vuestorefront.io/category/accessories/accessories-women/accessories-women-sunglasses')

该方法返回一个响应对象。您可以从中获取带有属性的状态代码(在本例中,它返回代码)和带有 content 属性的 HTML 数据。响应对象保存在变量 中。GETstatus_code200r

第 2 步:使用 BeautifulSoup 提取特定信息

通过使用 BeautifulSoup 对象上的 select 方法提取所需的信息,将属性 data-testid 设置为 in 具有类的元素中的锚标记 。linkgrid

from bs4 import BeautifulSoup soup = BeautifulSoup(r.content, 'html.parser')  for item in soup.select('.grid a[data-testid="link"]'):  print(item.text)

这将返回在文档上找到的所有具有指定属性的锚标记的列表,并且使用简单的循环,您可以在屏幕上打印所需的信息。使用以下代码更新文件:forscraper.py

import requestsfrom bs4 import BeautifulSoup
r = requests.get('https://demo.vuestorefront.io/category/accessories/accessories-women/accessories-women-sunglasses')soup = BeautifulSoup(r.content, 'html.parser')

for item in soup.select('.grid a[data-testid="link"]'): print(item.text)

祝贺!你做到了;您已成功使用请求 Python 库进行 Web 抓取。输出应如下所示:

Sunglasses Spektre multiSunglasses Spektre brownSunglasses Spektre greySunglasses Spektre black

4.  Beautiful Soup 

Beautiful Soup 是一个功能强大的 Python Web 抓取库,特别适用于解析 XML 和 HTML 文档。它的便利性是其最受欢迎的福利之一。Beautiful Soup 建立在众所周知的 Python 解析包之上,允许您尝试不同的技术。

使用 Beautiful Soup,您可以扫描已解析的文档并识别特定类型或格式下的所有数据。它具有很强的编码检测能力。

👍 优点:

  • 易于使用和导航。

  • 可扩展的功能。

  • 积极的社区支持。

  • 详细文档。

👎 缺点:

  • 有限的支持。

  • 您需要安装多个依赖项。

更多:看看我们的 Beautiful Soup 网页抓取教程,学习使用这个 Python 库

5.Playwright

Playwright 是一个开源的网络抓取库,可以更轻松地从不同浏览器的网站中提取数据,因为它提供了一个出色的跨浏览器自动化解决方案。

尽管 Playwright 是用户友好的,但其概念和功能可能仍需要一些时间才能正确理解。而且由于它需要运行不同的浏览器实例,因此它比其他库消耗更多的内存。

👍 优点:

  • 跨浏览器支持。

  • 高级 API。

  • 强大的选择器引擎。

  • 无头模式。

👎 缺点:

  • 它是资源密集型的。

  • 持续维护或更新。

  • 陡峭的学习曲线。

更多:查看 Playwright 网页抓取教程以开始使用。

6.Scrapy

Scrapy 是一个高级框架,用于从高度复杂的网站中抓取数据。有了它,就可以使用预定义的函数或外部库绕过验证码。

您可以编写一个简单的 Scrapy 爬虫,通过 Python 类使用对象定义来抓取 Web 数据。但是,与其他 Python 抓取库相比,它不是特别用户友好。

尽管此库的学习曲线很陡峭,但您可以使用它做很多事情,并且它在执行爬网任务时非常高效。

👍 优点:

  • 用于抓取目的的一般框架。

  • 强大的编码支持。

  • 它不需要 BeautifulSoup。

👎 缺点:

  • 陡峭的学习曲线。

  • Scrapy 无法抓取动态网页。

  • 对于不同的网站,它需要不同的安装步骤。

如何使用 Scrapy 抓取网页

第 1 步:创建 Spider 类

创建一个名为的新类,并为其指定参数 。在类中,将名称定义为 ,并定义为要抓取的 URL 列表。AccessorySpiderscrapy.SpidermySpiderstart_urls

import scrapy  class AccessorySpider(scrapy.Spider):    name='mySpider'    start_urls = ['https://demo.vuestorefront.io/category/accessories/accessories-women/accessories-women-sunglasses',]

步骤 2:定义解析方法

parse 方法采用一个参数,您可以使用响应对象上的方法检索每个项目。CSS 方法可以将 item 类的 css 选择器作为其参数:responseCSS

 response.css('.grid a[data-testid="link"]')

若要检索具有该类的所有项,请使用 XPath 方法进行循环并打印内容:for

for item in response.css('.grid a[data-testid="link"]'):    print(item.xpath('string(.)').get())

使用以下代码更新文件:scraper.py

import scrapy
class AccessorySpider(scrapy.Spider):    name='mySpider'    start_urls = ['https://demo.vuestorefront.io/category/accessories/accessories-women/accessories-women-sunglasses']
def parse(self, response): for item in response.css('.grid a[data-testid="link"]'): print(item.xpath('string(.)').get())

通过在终端中执行以下脚本来运行爬虫,您应该会看到屏幕上打印的项目列表:

Sunglasses Spektre multiSunglasses Spektre brownSunglasses Spektre greySunglasses Spektre black

就是这样!

7. urllib3

urllib3 是一个 HTTP 客户端,以其可靠性、性能优化和广泛的功能而闻名。它为发出 HTTP 请求提供了坚实的基础,并且经常被其他 Python Web 抓取库或框架使用。

它适用于实例(类)、管理连接池的响应对象和线程安全。PoolManager

👍 优点:

  • 扩展。

  • 良好的社区支持。

  • 它使用 处理并发性。PoolManager

👎 缺点:

  • 与 Requests 等其他库相比,语法复杂。

  • urllib3 无法提取动态数据。

如何使用 urllib3 抓取网页

步骤一:创建PoolManager实例

导入 urllib3 库,然后创建一个实例并将其保存到名为 :PoolManagerhttp

import urllib3 http = urllib3.PoolManager()

创建实例后,您可以使用该方法发出 HTTP 请求。PoolManagerGETrequest()

第 2 步:发出 GET 请求

在实例上使用该方法。您可以为 request 方法提供两个参数来发出简单的请求。在这种情况下,第一个是字符串,第二个是要抓取的 URL 给出的字符串:requestPoolManagerGETGET

r = http.request('GET', 'https://demo.vuestorefront.io/category/accessories/accessories-women/accessories-women-sunglasses')

步骤 3:从响应对象中提取数据

请求响应由 HTTPResponse 对象给出,您可以从中获取状态代码等信息。让我们使用响应对象和 BeautifulSoup 上的方法获取数据:data

soup = BeautifulSoup(r.data, 'html.parser')

要提取数据,请将 for 循环与方法和项的 css 选择器一起使用:select

for item in soup.select('.grid a[data-testid="link"]'):    print(item.text)

使用以下代码更新文件:scraper.py

import urllib3from bs4 import BeautifulSoup

http = urllib3.PoolManager()

r = http.request('GET', 'https://demo.vuestorefront.io/category/accessories/accessories-women/accessories-women-sunglasses')soup = BeautifulSoup(r.data, 'html.parser')

for item in soup.select('.grid a[data-testid="link"]'): print(item.text)

就是这样!你已经使用 urllib3 Python 网页抓取库成功地从 Vue 店面的配件类别中抓取了数据:

Sunglasses Spektre multiSunglasses Spektre brownSunglasses Spektre greySunglasses Spektre black


如果对爬虫技术感兴趣,可以跟蚂蚁老师学习爬虫课程。

咨询微信:ant_learn_python

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/169337
 
895 次点击