网页渲染的4种方法
使用Selenium库
Selenium是一个自动化测试工具,也可以用于爬虫。它可以模拟真实用户的行为,包括点击、填写表单等操作,从而获取完整的动态渲染页面。以下是一个简单的示例代码:
from selenium import webdriver
# 创建一个浏览器实例
driver = webdriver.Chrome()
# 打开网页
driver.get("http://example.com")
# 获取页面源码
html = driver.page_source
# 关闭浏览器
driver.quit()
# 6.043582201004028
使用PhantomJS库
PhantomJS是一个无界面的浏览器,它可以在后台执行网页渲染并返回页面源码。以下是一个示例代码:
from selenium import webdriver
# 创建一个PhantomJS浏览器实例
driver = webdriver.PhantomJS()
# 打开网页
driver.get("http://example.com")
# 获取页面源码
html = driver.page_source
# 关闭浏览器
driver.quit()
# 5.2301108837127686
使用Requests-HTML库
Requests-HTML是一个基于Requests库的HTML解析库,它可以执行JavaScript并获取动态渲染的页面。以下是一个示例代码:
from requests_html import HTMLSession
# 创建一个HTML会话
session = HTMLSession()
# 打开网页
response = session.get("http://example.com")
# 渲染页面
response.html.render()
# 获取页面源码
html = response.html.html
# 4.586602687835693
使用Pyppeteer库
Pyppeteer是一个使用Chrome DevTools Protocol控制无头Chrome浏览器的库。以下是一个示例代码:
import asyncio
from pyppeteer import launch
async def main():
# 创建一个浏览器实例
browser = await launch()
# 创建一个页面实例
page = await browser.newPage()
# 打开网页
await page.goto("http://example.com")
# selector选择器 元素
await page.select('#year', f'{lyear}')
await page.select('#month', f'{month}')
# 按钮
element = await page.waitForXPath('//*[@id="wrap"]//input') # xpath
box = await element.boundingBox()
target_x = box['x'] + box['width'] // 2
target_y = box['y'] + box['height'] // 2
await page.mouse.click(target_x, target_y)
time.sleep(2) # 等待ajax数据加载
# 获取页面源码
html = await page.content()
# 关闭浏览器
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
# 3.305264711380005