Python爬虫有哪些常见的反爬手段?有何应对手段?

liftword2个月前 (02-25)技术文章6

随着互联网的发展,网络爬虫技术也越来越成熟,但网站为了保护自身数据安全和服务器稳定性,也采取了各种反爬措施。

1. User-Agent 检测

案例: 某些网站会拒绝 User-Agent 为 python-requests 的请求。

import?requests

headers?=?{
????"User-Agent":?"Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/118.0.0.0?Safari/537.36"
}

response?=?requests.get("https://www.example.com",?headers=headers)
print(response.text)

应对方法:

  • 设置合理的 User-Agent: 如代码示例所示,将 User-Agent 设置为常用浏览器的 User-Agent。
  • 使用 User-Agent 池: 可以创建一个 User-Agent 列表,每次请求随机选择一个 User-Agent。

2. IP 限制

案例: 频繁访问网站会被封禁 IP。

import?requests
import?time

for?i?in?range(10):
????response?=?requests.get("https://www.example.com")
????print(response.text)
????time.sleep(1)??#?设置访问间隔

应对方法:

  • 使用代理 IP: 可以使用免费或付费的代理 IP 服务,每次请求使用不同的代理 IP。
  • 设置访问频率: 如代码示例所示,使用 time.sleep() 函数设置访问间隔,避免频繁访问。

3. Cookie 验证

案例: 某些页面需要登录才能访问,登录后会设置 Cookie。

import?requests

cookies?=?{
????"sessionid":?"your_session_id"
}

response?=?requests.get("https://www.example.com/profile",?cookies=cookies)
print(response.text)

应对方法:

  • 使用浏览器登录网站,获取 Cookie: 可以手动登录网站,然后从浏览器开发者工具中复制 Cookie。
  • 使用 Cookie 池: 可以使用 requests.Session() 对象或第三方库例如 requests-cookiemonster 来管理 Cookie。

4. JavaScript 渲染

案例: 网站使用 JavaScript 动态加载数据。

from?selenium?import?webdriver

driver?=?webdriver.Chrome()
driver.get("https://www.example.com")

#?等待页面加载完成
driver.implicitly_wait(10)

#?获取渲染后的页面源码
html?=?driver.page_source

print(html)
driver.quit()

应对方法:

  • 使用 Selenium、Puppeteer 等工具模拟浏览器行为: 如代码示例所示,使用 Selenium 控制浏览器加载页面并执行 JavaScript 代码。
  • 使用 Splash 等渲染服务: Splash 是一个 JavaScript 渲染服务,可以获取渲染后的 HTML 内容。

5. 验证码

案例: 频繁访问或执行敏感操作会触发验证码。

应对方法:

  • 使用 OCR 技术识别验证码: 可以使用 tesseract-ocr 等 OCR 工具识别简单的验证码。
  • 使用打码平台: 可以使用第三方打码平台,人工或机器识别验证码。

6. 动态加载

案例: 网站使用 Ajax 加载数据。

应对方法:

  • 使用浏览器开发者工具分析网络请求: 可以使用浏览器开发者工具的 "Network" 面板,查看页面加载过程中发出的 Ajax 请求,找到数据加载接口。
  • 使用 Charles、Fiddler 等抓包工具拦截网络请求: 可以使用抓包工具拦截浏览器和服务器之间的网络请求,分析数据加载过程。

7. 字体反爬

案例: 网站使用自定义字体,将网页上的文字替换成特殊字符。

应对方法:

  • 分析网页源码,找到字体文件和字符映射关系: 可以查看网页源码,找到字体文件的 URL,下载字体文件并分析其字符映射关系。
  • 使用 Python 的 `fontTools` 库解析字体文件: 可以使用 fontTools 库解析字体文件,提取字符映射关系。

8. 蜜罐陷阱

案例: 网站设置隐藏链接或表单,专门用来吸引爬虫。

应对方法:

  • 谨慎访问网页上的链接和表单: 避免访问可疑内容,例如 display: none 的链接或表单。
  • 使用 robots.txt 文件,遵守网站的爬虫规则: robots.txt 文件规定了爬虫可以访问哪些页面,爬虫开发者应该遵守 robots.txt 文件的规则。

总结



以上是对 Python 爬虫常见的 8 种反爬手段的详细讲解和代码案例分析。爬虫开发者需要了解这些反爬手段,并采取相应的应对措施,才能有效地获取所需数据。

相关文章

Python高级爬虫技巧揭秘_python爬虫入门到精通

爬虫技术已经从简单的网页数据抓取发展到复杂的模拟和分布式架构设计。在实际场景中,高级爬虫技术能够有效突破反爬机制,模拟用户行为,并通过分布式爬取提升效率。绕过反爬机制常见反爬手段User-Agent...

如何入门 Python 爬虫?_python爬虫自学步骤

1.很多人一上来就要爬虫,其实没有弄明白要用爬虫做什么,最后学完了却用不上。大多数人其实是不需要去学习爬虫的,因为工作所在的公司里有自己的数据库,里面就有数据来帮助你完成业务分析。什么时候要用到爬虫呢...

十二个Python爬虫面试题,看看自己的学习成效吧

现在疫情差不多稳定了很多人也开始工作,没工作的也开始找工作,下面呢为学python的同学选取了12个python爬虫面试题,希望有帮助。1、简述一下爬虫程序执行的流程  获取想要的页面  根据规则进行...

Python数据分析之Scrapy第一练:十分钟编写一个Scrapy爬虫

背景在前面的几篇关于爬虫的文章中,我们对基础的Requests、lxml两个库做了简要介绍,但是重所周知,Scrapy才是爬虫界的扛把子,想要爬取企业外部数据,肯定是无法逃避的。为了方便小伙伴们根据自...