python爬虫工程师 | 都会遇到的反爬手段,详细展示低难度反爬

举报
梦想橡皮擦 发表于 2023/05/29 11:38:00 2023/05/29
【摘要】 在爬虫实战过程中,常见的反爬手段如下所示。IP 地址限制:网站可以检测爬虫的 IP 地址,并限制爬虫访问。User-Agent 限制:网站可以通过检测请求头中的 User-Agent 来识别爬虫。Referrer 限制:网站可以通过检测请求头中的 Referrer 字段来识别爬虫。Cookies 限制:网站可以通过在响应中发送 Cookies 来识别爬虫。频率限制:网站可以限制爬虫访问频率,...

在爬虫实战过程中,常见的反爬手段如下所示。

  • IP 地址限制:网站可以检测爬虫的 IP 地址,并限制爬虫访问。
  • User-Agent 限制:网站可以通过检测请求头中的 User-Agent 来识别爬虫。
  • Referrer 限制:网站可以通过检测请求头中的 Referrer 字段来识别爬虫。
  • Cookies 限制:网站可以通过在响应中发送 Cookies 来识别爬虫。
  • 频率限制:网站可以限制爬虫访问频率,以防止爬虫对网站造成过多压力。
  • JavaScript 混淆:网站可以使用 JavaScript 混淆技术来防止爬虫识别页面内容。
  • HTTPS 加密:网站可以使用 HTTPS 加密协议来防止爬虫抓取数据。

IP地址限制

IP 地址限制是指网站可以通过检测请求的 IP 地址,并限制特定 IP 地址访问网站。

这是一种常用的反爬手段,主要用于防止爬虫对网站造成过多压力。

下面是一个 Python 代码示例,使用了 requests 库进行请求,并在请求头中指定了代理 IP 地址:

import requests

url = "https://pachong.vip"
# 设置代理 IP 地址
proxies = {
  "http": "http://代理IP:端口",
  "https": "http://代理IP:端口",
}
# 注意 proxies 参数
response = requests.get(url, proxies=proxies)

print(response.text)

如果网站限制了特定 IP 地址的访问,使用代理 IP 地址就可以绕过限制,并成功抓取数据。

User-Agent 限制

User-Agent 限制是指网站可以通过检测请求头中的 User-Agent 字段,识别请求来源是否是爬虫。

如果识别为爬虫,网站将限制或拒绝该请求。

image.png

下面是 User-Agent 字段的格式:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3

:point_right: 为了绕过 User-Agent 限制,可以在请求头中指定一个常见的浏览器 User-Agent,以模拟浏览器访问,以下是代码示例:

import requests

url = "https://pachong.vip"

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

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

print(response.text)

Referrer 限制

Referrer 限制是指网站可以通过检测请求头中的 Referrer 字段,识别请求的来源。

如果识别为爬虫,网站将限制或拒绝该请求。

下面是 Referrer 字段的格式:

Referer: https://www.example.com

为了绕过 Referrer 限制,可以在请求头中不指定 Referrer,或者指定一个普遍的 Referrer,以下是使用 Python 的 Requests 库的代码示例:

import requests

url = "https://pachong.vip"

headers = {
    'Referer': 'https://pachong.vip'
}

response = requests.get(url, headers=headers)
print(response.text)

Cookies 限制

Cookies 限制反爬是指在服务器端使用 Cookies 技术限制爬虫访问数据的手段。

Cookies 是一种存储在客户端的数据结构,用于识别客户端与服务器端的会话。

服务器端可以使用 Cookies 存储登录信息,并在每次请求时发送给客户端,以识别客户端的身份。

如果服务器端使用 Cookies 限制爬虫访问数据,只有携带正确 Cookies 的请求才能够获得正确数据。

下面是使用 Python 爬取网站数据,并携带 Cookies 的代码示例:

import requests

# 设置 Cookies
cookies = {
    "Cookie1": "xiangpica",
    "Cookie2": "beautiful",
}

# 发送请求,并携带 Cookies
response = requests.get("https://pachong.vip", cookies=cookies)

# 打印响应数据
print(response.text)

频率限制反爬

频率限制反爬是指在服务器端限制客户端的请求频率的反爬手段。

服务器端可以限制一个 IP 地址每秒只能发送 10 次请求,如果超过这个频率,则直接拒绝请求。

Tips:频率限制反爬可以防止爬虫短时间内大量请求数据,防止服务器被爬虫程序消耗资源,影响服务器正常功能。

import time
import requests

# 请求频率,每秒请求次数
frequency = 10

# 记录请求开始时间
start_time = time.time()

# 记录请求次数
request_count = 0

while True:
    # 如果请求次数小于请求频率
    if request_count < frequency:
        # 发送请求
        response = requests.get("https://pachong.vip")

        # 打印响应数据
        print(response.text)

        # 增加请求次数
        request_count += 1

    # 如果请求次数等于请求频率
    if request_count == frequency:
        # 计算已经用时
        elapsed_time = time.time() - start_time

        # 如果已经用时小于 1 秒
        if elapsed_time < 1:
            # 等待剩余时间
            time.sleep(1 - elapsed_time)

        # 重置请求开始时间
        start_time = time.time()

        # 重置请求次数
        request_count = 0

学习时先声明请求频率变量: frequency ,并在循环中使用该值来控制请求次数。

每次请求时,我们检查请求次数是否小于请求频率。

如果是,我们就发送请求,并增加请求次数。

如果请求次数等于请求频率,我们就计算已经用时的时间,并等待剩余时间以使得请求频率不超过限制。

JavaScript 混淆

JavaScript 混淆反爬是一种防止爬虫自动获取网站内容的常见手段。在这种情况下,网站的某些关键数据可能已经被混淆,使其难以被自动抓取。

在 Python 中,我们可以使用 BeautifulSoup 和 Selenium 等库来处理 JavaScript 混淆反爬。

from selenium import webdriver

# 配置驱动器
driver = webdriver.Chrome()

# 访问混淆页面
driver.get("https://www.pachong.vip/blog")

# 获取混淆数据
data = driver.find_elements_by_name("list-group")[0].text

# 关闭浏览器
driver.quit()

HTTPS 加密反爬

HTTPS 加密是一种防止网络数据被窃取的常用技术,也是反爬技术的一部分。在 HTTPS 加密的情况下,爬虫程序无法直接访问网站数据,需要使用特定的方法来处理。

在 Python 中,我们可以使用 requests 库来处理 HTTPS 加密反爬:

import requests

# 访问 HTTPS 页面
response = requests.get("https://www.pachong.vip")

# 获取页面内容
content = response.text

# 打印页面内容
print(content)

如果网站使用的是自定义证书,您可以在请求时传递自定义证书。这样可以避免 SSL 证书错误,并且在请求时只验证指定的证书。

以下是使用自定义证书的代码示例:

import requests

# 访问 HTTPS 页面,使用自定义证书
response = requests.get("https://www.pachong.vip/secure-page", verify="./cert.pem")

# 获取页面内容
content = response.text

# 打印页面内容
print(content)

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 874 篇原创博客

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。