哪些 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 webdriver
from 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 multi
Sunglasses Spektre brown
Sunglasses Spektre grey
Sunglasses Spektre black
2. Requests

Requests 是一个用户友好的 Python 网络抓取库,建立在 urllib3 之上。它可以直接获取一个没有实例的 URL。此外,发出请求后,可以使用响应对象上的属性访问网页的内容。
它简化了发送 HTTP 请求和处理响应的过程,使开发人员更容易与 Web 服务和 API 进行交互。
👍 优点:
👎 缺点:
如何使用请求抓取网页
让我们来看看 Vue 店面页面。页面上四个项目中每个项目的标题都包含在锚点标记中,这些标记将属性设置为类为 的元素内。data-testid
link
grid
步骤 1:使用 GET 方法获取主要内容
使用以下代码:
import requests
r = requests.get('https:
该方法返回一个响应对象。您可以从中获取带有属性的状态代码(在本例中,它返回代码)和带有 content 属性的 HTML 数据。响应对象保存在变量 中。GET
status_code
200
r
第 2 步:使用 BeautifulSoup 提取特定信息
通过使用 BeautifulSoup 对象上的 select 方法提取所需的信息,将属性 data-testid 设置为 in 具有类的元素中的锚标记 。link
grid
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.content, 'html.parser')
for item in soup.select('.grid a[data-testid="link"]'):
print(item.text)
这将返回在文档上找到的所有具有指定属性的锚标记的列表,并且使用简单的循环,您可以在屏幕上打印所需的信息。使用以下代码更新文件:
for
scraper.py
import requests
from bs4 import BeautifulSoup
r = requests.get('https:
soup = BeautifulSoup(r.content, 'html.parser')
for item in soup.select('.grid a[data-testid="link"]'):
print(item.text)
祝贺!你做到了;您已成功使用请求 Python 库进行 Web 抓取。输出应如下所示:
Sunglasses Spektre multi
Sunglasses Spektre brown
Sunglasses Spektre grey
Sunglasses 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 列表。AccessorySpider
scrapy.Spider
mySpider
start_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 选择器作为其参数:response
CSS
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
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 multi
Sunglasses Spektre brown
Sunglasses Spektre grey
Sunglasses Spektre black
就是这样!
7. urllib3

urllib3 是一个 HTTP 客户端,以其可靠性、性能优化和广泛的功能而闻名。它为发出 HTTP 请求提供了坚实的基础,并且经常被其他 Python Web 抓取库或框架使用。
它适用于实例(类)、管理连接池的响应对象和线程安全。PoolManager
👍 优点:
扩展。
良好的社区支持。
它使用 处理并发性。PoolManager
👎 缺点:
与 Requests 等其他库相比,语法复杂。
urllib3 无法提取动态数据。
如何使用 urllib3 抓取网页
步骤一:创建PoolManager
实例
导入 urllib3 库,然后创建一个实例并将其保存到名为 :PoolManager
http
import urllib3
http = urllib3.PoolManager()
创建实例后,您可以使用该方法发出 HTTP 请求。PoolManager
GET
request()
第 2 步:发出 GET
请求
在实例上使用该方法。您可以为 request 方法提供两个参数来发出简单的请求。在这种情况下,第一个是字符串,第二个是要抓取的 URL 给出的字符串:request
PoolManager
GET
GET
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 urllib3
from 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 multi
Sunglasses Spektre brown
Sunglasses Spektre grey
Sunglasses Spektre black
如果对爬虫技术感兴趣,可以跟蚂蚁老师学习爬虫课程。
咨询微信:ant_learn_python