当前位置:首页>python>Python爬虫教程35:常见的反爬与应对示例

Python爬虫教程35:常见的反爬与应对示例

  • 2026-10-11 07:38:49
Python爬虫教程35:常见的反爬与应对示例

Python,速成心法

敲代码,查资料,问Ai

练习,探索,总结,优化

★★★★★博文创作不易,使用代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★

---------★爬虫系列教程★----------

Python爬虫自学大纲

Python爬虫教程34:如何在访问网址失败后,间隔(2秒、3秒)进行重试

Python爬虫教程33:you-get爬虫利器,一行代码实现,视频+音频+图片的下载

Python项目21:双色球历史数据爬虫+数据分析小工具

Python爬虫教程32:东财上面获取,股票行业板块的名称+代码数据(json解析)

Python爬虫教程31:requests手动指定网页编码+自动检测的方法

Python爬虫教程30:Selenium网页元素,定位的8种方法!

Python爬虫教程29:使用fake_useragent模块,随机生成User Agent字符串

Python教程69:解密JavaScript中,常见的加密方法

Selenium教程05:使用webdriver-manager自动下载浏览器驱动,再也不用担心driver版本的问题了

Python爬虫教程28:聊聊反爬爬虫经常遇到的问题及解决方法

Python爬虫教程27:秀啊!用Pandas 也能爬虫??

Python爬虫教程26:selenium使用stealth.min.js文件,隐藏浏览器指纹特征

Python入门教程41:Requests模块

Python入门教程36:urllib网页请求模块的用法

Python爬虫教程24:酷狗音乐热门榜单,歌曲歌词下载

Python爬虫教程23:代理ip的采集与效验方法

Python爬虫教程22:彼岸壁纸

Python爬虫教程21:查询链家网北京二手房源信息

Python爬虫教程20:ip138.com手机号码,归属地查询

Python爬虫教程19:B站音频+视频下载

Python爬虫教程18:去古诗文网下载,孙子兵法十三篇

Python爬虫教程17:下载快手视频

Python爬虫教程16:下载百度图片

Python爬虫教程15:下载英雄联盟皮肤

Python爬虫教程14:下载喜马拉雅,郭德纲相声音频

Python爬虫教程12:从b站获取神仙姐姐的视频弹幕内容

Python爬虫教程12:使用urlretrieve下载王者荣耀英雄皮肤

Python爬虫教程11:使用正则表达式爬取高清壁纸

Python爬虫教程10:使用json解析股票数据,并画上证指数K线图

Python爬虫教程09:使用Json解析艺恩娱数网票房数据可视化

Python爬虫教程08:使用json解析中国气象局的天气数据

Python爬虫教程07:教你拿下必应词典的数据的3种方式

Python爬虫教程06:使用xpath和正则表达式采集豆瓣250数据

包括常见的反爬技术:User-Agent检测、IP限制、请求频率限制、验证码、动态内容加载等。应对方法:使用fake_useragent、代理IP、延迟/限速、使用session、模拟浏览器(如Selenium/Playwright)、解析JavaScript渲染等。
以下是一些常见的反爬虫机制及对应的 Python 应对示例。所有示例仅用于学习和合法数据采集场景,请尊重目标网站的 robots.txt 和服务条款。
1. User-Agent 检测
原理:服务器检查请求头中的 User-Agent,若缺失或为常见库(如 python-requests)则拒绝。
应对:伪装成真实浏览器。
import requestsheaders = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}resp = requests.get('https://example.com', headers=headers)
更自动化的方式使用 fake-useragent 库:
from fake_useragent import UserAgentua = UserAgent()headers = {'User-Agent': ua.random}
2. IP 封锁 / 频率限制
原理:同一 IP 在短时间内请求过多会被封禁或返回验证码。
应对:使用代理 IP 池,添加随机延时。
proxies = {    'http': 'http://127.0.0.1:8080',    'https': 'https://127.0.0.1:8080'}resp = requests.get('https://example.com', proxies=proxies)
动态获取免费代理(不稳定,仅学习用):
import requestsfrom bs4 import BeautifulSoupdef get_free_proxies():    url = 'https://free-proxy-list.net/'    soup = BeautifulSoup(requests.get(url).text, 'html.parser')    proxies = []    for row in soup.select('table.table tbody tr'):        cells = row.find_all('td')        if cells[6].text == 'yes':  # HTTPS 支持            proxy = f"{cells[4].text.lower()}://{cells[0].text}:{cells[1].text}"            proxies.append(proxy)    return proxies
延时示例
import timeimport randomfor url in url_list:    resp = requests.get(url, headers=headers)    time.sleep(random.uniform(1, 3))  # 随机睡眠1~3秒
3. 请求头完整性检查
原理:检查 Referer、Accept-Language、Cookie 等是否真实。
应对:复制完整浏览器请求头。
headers = {    'User-Agent': '...',    'Accept': 'text/html,application/xhtml+xml,...',    'Accept-Language': 'zh-CN,zh;q=0.9',    'Referer': 'https://www.google.com/',    'Cookie': 'your_cookie_value'}
对于账号登入的,使用 requests.Session 自动维持 Cookie:
session = requests.Session()session.headers.update(headers)resp = session.get('https://example.com/login')# 登录后 session 会自动携带返回的 Cookie
4. 动态内容(JavaScript 渲染)
原理:数据由 JS 动态生成,直接获取 HTML 不包含目标数据。
应对:
分析 AJAX 接口(最轻量)
使用 Selenium / Playwright / Puppeteer 
模拟浏览器方法一:寻找真实 API
打开浏览器开发者工具 → Network → XHR,找到返回数据的真实请求。
# 直接请求数据接口api_url = 'https://example.com/api/getData?param=value'resp = requests.get(api_url, headers=headers)data = resp.json()
方法二:Selenium 示例
from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsoptions = Options()options.add_argument('--headless')  # 无头模式options.add_argument('--disable-blink-features=AutomationControlled')driver = webdriver.Chrome(options=options)driver.get('https://example.com')content = driver.page_sourcedriver.quit()
方法三:Playwright(更现代)
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:    browser = p.chromium.launch(headless=True)    page = browser.new_page()    page.goto('https://example.com')    content = page.content()    browser.close()
5. 验证码(CAPTCHA)
原理:弹出图片验证码、滑块验证等。
应对:对接打码平台(如 2Captcha、超级鹰),机器学习识别简单验证码,降低请求频率避免触发
示例(使用打码平台 API):
# 超级鹰示例(伪代码)from chaojiying import Chaojiying_Clientchaojiying = Chaojiying_Client('username', 'password', 'soft_id')im = open('captcha.png', 'rb').read()result = chaojiying.PostPic(im, 1902)  # 1902 为验证码类型code = result['pic_str']

注意事项

尊重规则:检查 robots.txt,避免对目标服务器造成压力。
法律风险:爬取非公开数据可能侵权,仅用于学习或公开数据。
反反爬是博弈:没有一劳永逸的方法,需持续调整策略,随网页的结构变化比而变化。
优先使用 API:如果目标网站提供官方 API,应优先使用。
以上示例展示了如何应对常见的反爬机制。实际应用中需要组合多种策略,并根据目标网站的具体行为动态调整。

完毕!!感谢您的收看

------★★历史博文集合★★------

Python入门篇  进阶篇  视频教程  Py安装

py项目Python模块 Python爬虫  Json

Xpath正则表达式SeleniumEtreeCss

Gui程序开发TkinterPyqt5 列表元组字典

数据可视化 matplotlib  词云图Pyecharts

海龟画图PandasBug处理电脑小知识

自动化脚本编程工具NumPy CSVWeb

Pygame  图像处理  机器学习数据库

最新文章

随机文章