在Python爬虫过程中,我们会遇到一些反爬虫机制,如利用动态加载。这种情况如何来爬虫呢?
Selenium
作为一个Web自动化测试工具,能有效降低反爬风险,尤其适用于处理JavaScript渲染数据和模拟登录。同时浏览器模拟、网页操作、数据定位、异常处理等。
环境
-
Python 3.13 -
Linux桌面环境 -
firefox浏览器
安装浏览器
笔者使用的kali环境,已经预装firefox浏览器。若你的环境中,没有安装可参考下面方式安装。
安装snap
apt install snapd
更新 Snap 存储库: 安装完 snapd 后,建议更新 Snap 存储库:
sudo snap refresh
安装火狐浏览器
snap install firefox
接下来,我们需要安装GeckoDriver
安装GeckoDriver
访问 https://github.com/mozilla/geckodriver/releases 下载对应版本的 Linux 64 位版本
unzip geckodriver-v0.33.0-linux64.zip
sudo mv geckodriver /usr/local/bin/
sudo chmod +x /usr/local/bin/geckodriver
在终端中输入下面命令,验证是否安装成功。
geckodriver --version
爬虫示例
本文以某数据平台为例!
代码如下:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
from bs4 import BeautifulSoup
import time
# 配置 Firefox 选项
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('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')
# 初始化 Service 对象(指定 GeckoDriver 路径)
service = Service(executable_path='/usr/local/bin/geckodriver')
# 初始化 FirefoxDriver
driver = webdriver.Firefox(service=service, options=options)
# 打开目标网页
driver.get('https://data.stats.gov.cn/easyquery.htm?cn=A01&zb=A010G06&sj=202502')
# 等待页面加载
time.sleep(3)
# 获取渲染后的 HTML
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()
# 解析数据
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("未找到表格数据")
python+selenium 可以模拟正常用户操作,从而实现爬虫。本文仅作为演示,但在实际操作中,可能需要结合实际情况,随机应变!
原文始发于微信公众号(kali笔记):Python+Selenium 反爬虫实战
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论