在Python爬虫中,会遇到反爬虫机制。如需要正常的浏览器访问才会显示内容,即动态加载内容。在前面我写过利用Selenium来实现。但是配置比较麻烦。因此,这里介绍另外一种方法!

利用Python+playwright来实现反爬虫。由于高版本的Python环境利用pip安装相关的模块,会提示报错。因此建议使用虚拟环境。
Selenium 爬虫参考文章《Python+Selenium 反爬虫实战》
创建虚拟环境
python3 -m venv biaoge #biaoge为虚拟环境的名字
source biaoge/bin/activate #激活虚拟环境
接下来,我们需要在虚拟环境中,安装相关工具。
安装 playwright
pip3 install playwright
安装完成后,安装对应的浏览器(本地环境中没有浏览器可以安装,有的话可以忽略)
playwright install firefox
因为是在虚拟环境中安装,因此,对本地环境没有影响。
示例代码:
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup
# 使用 sync_playwright 上下文管理器
with sync_playwright() as p:
# 启动 Firefox 浏览器
browser = p.firefox.launch(headless=True)
# 创建一个新的浏览器页面
page = browser.new_page(
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
)
# 打开目标网页
page.goto('https://data.xxxx.cn/easyquery.htm?cn=A01&zb=A010G06&sj=202502')
# 等待页面加载
page.wait_for_load_state('networkidle')
# 获取渲染后的 HTML
html = page.content()
soup = BeautifulSoup(html, 'html.parser')
# 关闭浏览器
browser.close()
# 解析数据
table_main = soup.find('table', id='table_main')
if table_main:
time_th = table_main.find_all('th')[1]
time = time_th.find('strong').get_text(strip=True)
tbody = table_main.find('tbody')
data = []
for tr in tbody.find_all('tr'):
tds = tr.find_all('td')
indicator = tds[0].get_text(strip=True).replace('\n', '')
price = tds[1].get_text(strip=True)
data.append((time, indicator, price))
for item in data:
print(f"时间: {item[0]}")
print(f"指标: {item[1]}")
print(f"价格: {item[2]}元/公斤\n")
else:
print("未找到表格数据")
效果:
注意事项
每次运行脚本,需要到虚拟环境中去。因此,最好建议是写一个脚本。
2 条评论
不错,学习了。配合AI编写脚本,可以事半功倍! ::bli:call::
是的! ::bli:chigua::