社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

蚂蚁学Python • 10 月前 • 755 次点击  

哪些 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
 
755 次点击