requests
是一个 Python 库,用于发送 HTTP 请求,如 GET 和 POST 请求。它通常用于与 Web 服务器交互,获取 HTML 页面、JSON 数据等。然而,requests
本身并不执行 JavaScript 代码,这意味着它无法处理 JavaScript 生成的动态内容或执行页面中的脚本。
当遇到需要执行 JavaScript 的情况时,可以使用以下几种方法:
Selenium 是一个自动化测试工具,可以模拟浏览器行为,包括执行 JavaScript。以下是一个使用 Selenium 的示例:
from selenium import webdriver
# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()
# 打开网页
driver.get('http://example.com')
# 获取页面源代码
html = driver.page_source
# 关闭浏览器
driver.quit()
Pyppeteer 是一个无头 Chrome/Chromium 浏览器的 Python 客户端,类似于 Puppeteer(Node.js 库)。它可以执行 JavaScript 并获取动态渲染的页面内容。以下是一个使用 Pyppeteer 的示例:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('http://example.com')
html = await page.content()
await browser.close()
return html
html = asyncio.get_event_loop().run_until_complete(main())
requests-html
是一个 Python 库,它结合了 requests
和 PyQuery,可以解析 HTML 页面并执行 JavaScript。以下是一个使用 requests-html
的示例:
from requests_html import HTMLSession
session = HTMLSession()
response = session.get('http://example.com')
# 执行 JavaScript
response.html.render()
# 获取页面源代码
html = response.html.html
requests
更慢,因为它们需要启动一个完整的浏览器实例。选择哪种方法取决于具体的需求和场景。如果只需要简单的 HTTP 请求,requests
就足够了;如果需要处理复杂的 JavaScript 渲染,则可能需要使用 Selenium、Pyppeteer 或 requests-html
。
领取专属 10元无门槛券
手把手带您无忧上云