2025 年使用 NODRIVER 进行网络抓取
在本指南中,我将向您介绍 NODRIVER 是什么,为什么它与众不同,以及如何使用它来构建网络刮擦程序--即使你是编码或刮擦程序的新手。
什么是 NODRIVER?
NODRIVER 是一款基于 Python 的浏览器自动化工具。它允许你打开网站、与网站互动并收集数据,所有这些都通过代码实现。
与许多刮擦工具不同,NODRIVER 不依赖 Selenium 或 Puppeteer。它不使用 ChromeDriver 也不是。相反,它使用自己的方法来控制浏览器。这给它带来了一些优势:
- 与传统工具相比,它能更好地避免检测。
- 它的设置要求较少。
- 它支持现代异步编程。
使用 MCP 服务器改进您的搜索功能
如果您需要一个简单、经济的解决方案来进行大规模或复杂的网络刮擦,包括使用验证码或高级反僵尸保护的网站,那么您应该考虑以下方案 Bright Data 的模型上下文协议 (MCP).
我与 Bright Data 没有任何关系,我只是非常喜欢使用 MCP 服务器。他们的 MCP 服务器可以让您从一个地方访问他们的所有产品。检查 所有可用工具.
现在,让我们回到 NODRIVER!
为什么使用 NODRIVER 进行网络抓取?
许多工具,如 Selenium、Playwright 和 Puppeteer 已经存在。那么,为什么要考虑 NODRIVER 呢?
这里有几个原因:
1.无外部驱动程序
像 Selenium 这样的传统工具需要使用 ChromeDriver,而 ChromeDriver 的安装和更新都很麻烦。NODRIVER 则不需要。你只需要 Python 和一个 基于 Chrome 浏览器 (如 Chrome 或 Brave)。
2.简单设置
只需一条命令就能安装 NODRIVER:
pip install nodriver
无需其他设置。你无需处理复杂的路径或系统变量。
3.异步设计
大多数刮库都是同步的。这意味着它们一次运行一个任务。NODRIVER 使用异步函数,能让你在更短的时间内完成更多任务,非常适合同时搜索多个页面。
4.更善于避免被发现
网站在检测机器人方面越来越聪明。由于 NODRIVER 并不遵循 Selenium 或 Puppeteer 的模式,因此在某些情况下可以避免被检测到。
设置第一个 NODRIVER 脚本
让我们来看看使用 NODRIVER 抓取一个简单网站的步骤。
步骤 1:安装 NODRIVER
打开终端并运行
pip install nodriver
确保同时安装了 Python 3.7。
步骤 2:编写基本脚本
下面是 NODRIVER 脚本的基本骨架:
import 节点驱动程序
async def main():
浏览器 = await nodriver.start()
页面 = await browser.get("https://example.com")
await page.close()
if __name__ == '__main__'(__main__:
nodriver.loop().run_until_complete(main())
该脚本会打开浏览器,访问网站,然后关闭。
浏览页面和收集数据
现在,让我们深入了解如何收集真实数据。
示例:从网站抓取报价
比方说,您想从一个网站收集报价,如 https://quotes.toscrape.com. 这个网站是用来练习刮擦的。
下面介绍如何在一页上收集所有报价:
import 节点驱动程序
async def main():
浏览器 = await nodriver.start()
页面 = await browser.get("https://quotes.toscrape.com")
引号 = await page.select_all("div.quote")
for quote in 引号:
文本 = (await quote.query_selector("span.text")).text
作者 = (await quote.query_selector("小作者").文本
print(f"{文本} - {作者}")
await page.close()
if __name__ == '__main__'(__main__:
nodriver.loop().run_until_complete(main())
处理多个页面
许多网站会将数据分割成多个页面。这就是所谓的分页。
为此,您需要检测 "下一步 "按钮,并不断访问新页面,直到它消失为止。
方法如下
import 节点驱动程序
async def main():
浏览器 = await nodriver.start()
base_url = "https://quotes.toscrape.com"
next_url = "/"
while next_url:
page = await browser.get(base_url next_url)
引语 = await page.select_all("div.quote")
for quote in 引号:
文本 = (await quote.query_selector("span.text")).text
作者 = (await quote.query_selector("小作者").文本
print(f"{文本} - {作者}")
next_btn = await page.select("li.next > a")
if next_btn:
attrs = next_btn.attributes
for i in range(len(attrs)):
if attrs[i] == "href":
next_url = attrs[i 1]
break
else:
next_url = None
await page.close()
if __name__ == '__main__'(__main__:
nodriver.loop().run_until_complete(main())
该版本会浏览所有页面,并打印找到的每一句话。
提取和存储数据
您可以将数据保存在文件中,而不是打印出来。JSON 就是一种很好的格式。
下面介绍如何在 JSON 文件中存储刮取的报价:
import 节点驱动程序
import json
async def main():
浏览器 = await nodriver.start()
base_url = "https://quotes.toscrape.com"
next_url = "/"
data = []
while next_url:
page = await browser.get(base_url next_url)
引语 = await page.select_all("div.quote")
for quote in 引号:
文本 = (await quote.query_selector("span.text")).text
作者 = (await quote.query_selector("小作者")).text
标签 = [tag.text for 标签 in await quote.query_selector_all("a.tag")]
data.append({
"引用":文本、
"作者": author、
"标签"标签
})
next_btn = await page.select("li.next > a")
if next_btn:
attrs = next_btn.attributes
for i in range(len(attrs)):
if attrs[i] == "href":
next_url = attrs[i 1]
break
else:
next_url = None
await page.close()
with open("quotes.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False,缩进=4)
if __name__ == '__main__'(__main__:
nodriver.loop().run_until_complete(main())
运行后,你将得到一个包含所有搜刮内容的 quotes.json 文件。
NODRIVER 目前面临的挑战
尽管 NODRIVER 功能强大,但它仍然是一款新产品。这意味着还存在一些错误和功能缺失。
1.无头模式可能不起作用
在不显示浏览器的情况下运行 NODRIVER(无头模式)有时会失败。这可能是一个错误,也可能是避免僵尸检测的一个功能。
2.属性提取不顺畅
当您尝试获取元素的属性时,NODRIVER 返回的是一个列表而不是字典。这就增加了工作难度。例如
attrs = element.attributes
# ['href','/page/2/']。
您必须循环浏览这份清单,才能找到所需的内容。
3.有限的代理支持
使用代理对严肃的刮擦很重要。NODRIVER 有一个 create_context() 方法,但没有足够的文档。该方法将来也许能用,但现在只能说是 "中看不中用"。
NODRIVER 的良好使用案例
NODRIVER 适用于
- 学习异步刮擦
- 避免简单的僵尸检测
- 搜索小型网站
- 快速测试创意
如果您正在开发一个复杂的项目,需要使用登录流、验证码或 IP 禁止,那么您现在可能仍然需要 Selenium 或 Playwright。
NODRIVER 的替代品
如果 NODRIVER 无法满足您的需求,这里有一些可靠的工具可供参考:
Playwright
- 完全异步
- 支持无头模式
- 内置对等待、身份验证和文件下载的支持
Selenium
- 非常成熟
- 支持多种浏览器
- 大型社区和大量教程
Scrapy
- 最适合大规模刮削
- 使用选择器和管道
- 用于抓取多个页面并存储数据
NODRIVER 的未来
NODRIVER 仍在不断发展壮大。它背后的开发者同时也是 "未检测 Chromedriver "的创造者,后者曾因躲避僵尸检测而大受欢迎。这一背景让我们相信,随着时间的推移,NODRIVER 将变得更加稳定。
我们期待很快看到的功能:
- 更好的属性处理
- 完全支持代理服务器
- 改进页面交互,如点击和打字
- 无头工作模式
结论
有了 NODRIVER 这样的工具,2025 年的网络搜索变得更快、更简单。它让你只需很少的设置就能构建简单快速的刮擦工具。NODRIVER 重量轻,易于使用。它无需使用 Selenium 或 Puppeteer 即可运行。这使得它非常适合小型项目或学习异步刮擦。
不过,它仍然存在一些缺陷。它还不完全支持代理、验证码或无头模式。对于更高级的需求,Playwright 或 Selenium 等工具是更好的选择。但如果你想快速测试想法,NODRIVER 是一个不错的选择。它是当今最有趣的刮擦工具之一。