Python爬虫反反爬实战代码合集_第1页
Python爬虫反反爬实战代码合集_第2页
Python爬虫反反爬实战代码合集_第3页
Python爬虫反反爬实战代码合集_第4页
Python爬虫反反爬实战代码合集_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python爬虫反反爬实战代码合集#Python爬虫反反爬实战代码合集

##基础反反爬技巧实现

importrequests

frombs4importBeautifulSoup

importtime

importrandom

#设置请求头

headers={

"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.3"

}

defget_html(url):

try:

response=requests.get(url,headers=headers,timeout=10)

response.raise_for_status()#检查请求是否成功

returnresponse.text

exceptrequests.RequestExceptionase:

print(f"请求错误:{e}")

returnNone

#使用代理IP池

proxies=[

{'http':'http://IP:PORT'},

{'http':'http://IP:PORT'}

]

defget_html_with_proxy(url,proxy):

try:

response=requests.get(url,headers=headers,proxies=proxy,timeout=10)

response.raise_for_status()

returnresponse.text

exceptrequests.RequestExceptionase:

print(f"代理请求错误:{e}")

returnNone

#设置请求间隔

defget_html_with_delay(url,delay=1):

time.sleep(delay)

returnget_html(url)

#隐藏浏览器痕迹

defget_html_with_user_agent(url,user_agent):

headers['User-Agent']=user_agent

returnget_html(url)

##进阶反反爬技巧实现

importrequests

frombs4importBeautifulSoup

importtime

importrandom

importjson

importre

#动态请求参数

defget_html_with_params(url,params=None):

ifparams:

response=requests.get(url,headers=headers,params=params,timeout=10)

else:

response=get_html(url)

response.raise_for_status()

returnresponse.text

#Cookie处理

defget_html_with_cookie(url,cookies=None):

ifcookies:

response=requests.get(url,headers=headers,cookies=cookies,timeout=10)

else:

response=get_html(url)

response.raise_for_status()

returnresponse.text

#JSON数据解析

defget_json_data(url):

response=requests.get(url,headers=headers,timeout=10)

response.raise_for_status()

returnresponse.json()

#正则表达式提取数据

defextract_data_with_regex(html,pattern):

returnre.findall(pattern,html)

#多线程爬取

importthreading

deffetch_url(url):

print(f"正在爬取:{url}")

get_html(url)

defmulti_thread_fetch(urls,num_threads=10):

threads=[]

forurlinurls:

thread=threading.Thread(target=fetch_url,args=(url,))

threads.append(thread)

thread.start()

forthreadinthreads:

thread.join()

##高级反反爬技巧实现

importrequests

frombs4importBeautifulSoup

importtime

importrandom

importhashlib

importbase64

importsocks

importsocket

#代理服务器设置

defsetup_proxy_server(proxy_host,proxy_port):

socks.set_default_proxy(socks.SOCKS5,proxy_host,proxy_port,username="USER",password="PASSWORD")

socket.socket=socks.socksocket

#请求重试机制

defget_html_with_retry(url,max_retries=3):

foriinrange(max_retries):

try:

response=requests.get(url,headers=headers,timeout=10)

response.raise_for_status()

returnresponse.text

exceptrequests.RequestExceptionase:

print(f"请求失败,重试次数:{i+1}/{max_retries}错误:{e}")

time.sleep(2**i)

returnNone

#动态验证码处理(示例)

defsolve_captcha(captcha_image_url):

#这里可以接入第三方验证码识别服务

return"识别到的验证码"

#二次请求伪造

defget_html_with_second_request(url):

first_response=get_html(url)

soup=BeautifulSoup(first_response,'html.parser')

#模拟用户行为,点击某个元素

ifsoup.select_one('button#next'):

next_url=soup.select_one('button#next')['href']

returnget_html(next_url)

returnfirst_response

##特殊场景反反爬实现

#WebSocket爬取

importwebsocket

defws_fetch(url):

websocket.enableTrace(True)

ws=websocket.WebSocketApp(url,

on_message=lambdaws,msg:print("收到消息:",msg),

on_error=lambdaws,err:print("错误:",err),

on_close=lambdaws,close_status_code,close_msg:print("关闭:",close_msg))

ws.run_forever()

#JWTToken处理

defget_jwt_token(url):

response=get_html(url)

soup=BeautifulSoup(response,'html.parser')

jwt_token=soup.select_one('meta[name="csrf-token"]')['content']

returnjwt_token

#跨域请求处理

defget_html_with_cdn(url):

#模拟CDN域名解析

cdn_urls=[

""+url,

""+url

]

forcdn_urlincdn_urls:

response=get_html(cdn_url)

ifresponse:

returnresponse

returnNone

##进阶反反爬技巧实战案例

###案例一:处理动态加载内容的网站

当网站内容通过JavaScript动态加载时,直接抓取HTML源码可能无法获取完整数据。这时可以采用以下方法:

1.分析网络请求:使用浏览器开发者工具的"网络"标签,观察页面加载过程中有哪些API请求返回了所需数据。

2.直接请求数据接口:如果发现数据接口,可以直接请求该接口获取JSON格式的数据,绕过页面渲染过程。

3.模拟浏览器行为:对于需要JavaScript执行才能加载的页面,可以使用selenium等工具模拟浏览器操作。

###案例二:应对验证码挑战

验证码是反爬虫的重要手段,可以采用以下策略:

1.账号轮换:准备多个账号,轮流使用,避免单一账号频繁被限制。

2.验证码识别服务:接入第三方验证码识别服务,如2Captcha、Anti-Captcha等。

3.人机互动:对于需要人工干预的验证码,可以设计人机互动环节,由真人完成验证。

4.预测算法:对于简单图形验证码,可以研究其生成规律,开发预测算法。

###案例三:处理IP封禁问题

当IP被频繁封禁时,可以尝试以下方法:

1.IP代理池:使用代理IP池轮换IP,避免单一IP被封。

2.请求间隔控制:合理设置请求间隔,模拟正常用户访问行为。

3.代理类型选择:根据需要选择HTTP代理、HTTPS代理或SOCKS5代理。

4.IP地理位置分布:使用不同地区的IP,分散封禁风险。

###案例四:应对浏览器指纹识别

浏览器指纹识别通过收集浏览器特征来识别用户,可以采取以下措施:

1.指纹清除:定期清除浏览器指纹信息,如User-Agent、屏幕分辨率等。

2.模拟浏览器环境:使用浏览器指纹模拟工具,如FingerprintJS的模拟环境。

3.多浏览器轮换:准备多个浏览器,轮流使用,避免单一浏览器被识别。

###案例五:处理需要登录的网站

对于需要登录的网站,可以采用以下策略:

1.保持会话:使用requests.Session()保持登录状态,避免每次请求都需要重新登录。

2.Cookie管理:妥善管理Cookie,避免丢失重要Cookie。

3.Token验证:对于使用Token验证的网站,需要正确处理Token的获取和刷新。

4.登录行为模拟:模拟正常用户的登录行为,避免因操作异常被识别。

##高级反反爬实战技巧

###1.请求行为模拟

-模拟正常用户请求频率,避免过于规律的请求模式。

-添加随机延迟,使请求时间分布更自然。

-模拟浏览器前后滚动行为,对于需要滚动加载的页面。

-模拟鼠标移动轨迹,对于需要交互的页面。

###2.数据加密解密

-分析网站数据加密方式,如AES、Base64等。

-解密数据后提取所需信息,避免在加密数据上做无用功。

-对于动态加密参数,研究其生成规律,实现动态解密。

###3.请求参数伪装

-分析网站参数验证逻辑,找出可利用的参数。

-伪装请求参数,绕过参数验证机制。

-使用随机参数值,避免被识别为机器人请求。

###4.异常处理优化

-设计完善的异常处理机制,对于网络异常、解析异常等情况。

-记录异常日志,便于分析网站反爬策略变化。

-设置异常重试机制,对于暂时性异常自动重试。

###5.分布式爬取策略

-使用分布式架构,分散请求压力。

-设置任务队列,合理分配爬取任务。

-设置节点隔离,避免单一节点被封影响整个系统。

##特殊场景应对技巧

###1.移动端爬取

-使用移动端代理,模拟移动设备请求。

-添加移动端特有的请求头信息,如Accept-Language等。

-调整解析策略,适应移动端页面布局。

###2.API接口爬取

-分析API接口文档,了解接口参数和返回格式。

-设置API请求频率限制,避免触发频率限制。

-处理API返回的Token,用于后续请求认证。

###3.重定向处理

-捕获重定向请求,分析重定向逻辑。

-设置重定向次数限制,避免无限重定向。

-分析重定向后的URL特征,优化爬取策略。

###4.数据去重处理

-设计数据去重机制,避免爬取重复数据。

-使用哈希算法识别重复数据。

-设置数据去重缓存,提高爬取效率。

##实战经验分享

1.逐步收敛策略:从宽松的爬取策略开始,逐步收敛到目标需求,避免一开始就被识别。

2.监控与调整:建立监控系统,实时监控爬取状态,及时调整爬取策略。

3.预案准备:针对可能出现的反爬措施,提前准备应对预案。

4.合法合规:遵守网站robots协议,避免爬取禁止爬取的内容。

5.负责任爬取:控制爬取频率,避免对目标网站造成过大负担。

##持续进化的反反爬策略

随着反爬技术的不断发展,反爬虫的策略也需要持续进化。这需要我们保持对网站反爬机制的敏感度,并随时调整自己的爬取策略。以下是一些进化的方向:

###深度学习与机器学习

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论