Python+Selenium 反爬虫实战

admin 2025年3月17日21:37:47评论1 views字数 1951阅读6分30秒阅读模式

在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 位版本

Python+Selenium 反爬虫实战
unzip geckodriver-v0.33.0-linux64.zip
sudo mv geckodriver /usr/local/bin/
sudo chmod +x /usr/local/bin/geckodriver

在终端中输入下面命令,验证是否安装成功。

geckodriver --version
Python+Selenium 反爬虫实战

爬虫示例

本文以某数据平台为例!

Python+Selenium 反爬虫实战代码如下:

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 反爬虫实战
爬虫效果

python+selenium 可以模拟正常用户操作,从而实现爬虫。本文仅作为演示,但在实际操作中,可能需要结合实际情况,随机应变!

原文始发于微信公众号(kali笔记):Python+Selenium 反爬虫实战

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月17日21:37:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Python+Selenium 反爬虫实战https://cn-sec.com/archives/3849056.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息