python爬虫——爬虫伪装和反“反爬”

news/2024/7/19 10:18:25 标签: python, 爬虫, 开发语言
前言

爬虫伪装和反“反爬”是在爬虫领域中非常重要的话题。伪装可以让你的爬虫看起来更像普通的浏览器或者应用程序,从而减少被服务器封禁的风险;反“反爬”则是应对服务器加强的反爬虫机制。下面将详细介绍一些常见的伪装和反反爬技巧,并提供对应的代码案例。

 

1. User-Agent伪装

User-Agent是HTTP请求头的一部分,其中包含了浏览器、手机等使用的应用程序的信息。在爬虫中,使用默认的User-Agent,或者使用爬虫常用的User-Agent,容易被服务器识别为机器人,因此我们需要伪装User-Agent。使用Python中的requests库可以方便地添加User-Agent头。

python">import requests

# 设置User-Agent头
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'}

# 请求URL
url = 'https://www.example.com'

# 发送请求
response = requests.get(url, headers=headers)

# 输出响应内容
print(response.text)
2. IP代理

单个IP频繁访问服务器容易被封禁,因此我们可以使用IP代理来访问网站。IP代理有免费和付费的,这里我们使用免费的IP代理。使用Python中的requests库可以方便地设置代理服务器。

python">import requests

# 设置代理服务器
proxies = {
    'http': 'http://127.0.0.1:1080',
    'https': 'https://127.0.0.1:1080'
}

# 请求URL
url = 'https://www.example.com'

# 发送请求
response = requests.get(url, proxies=proxies)

# 输出响应内容
print(response.text)
3. 随机访问时间间隔

频繁访问服务器容易被识别为机器人,因此我们需要模拟人类访问网站的行为,随机设置访问时间间隔。使用Python中的time库可以方便地设置访问时间间隔。

python">import requests
import time
import random

# 设置User-Agent头
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'}

# 请求URL
url = 'https://www.example.com'

# 随机访问时间间隔
time.sleep(random.randint(0, 3))

# 发送请求
response = requests.get(url, headers=headers)

# 输出响应内容
print(response.text)
4. Cookie伪装

有些网站需要登录才能访问,我们需要在访问网站时携带cookie,以模拟登录状态。使用Python中的requests库可以方便地设置cookie。

python">import requests

# 设置User-Agent头
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'}

# 设置cookie
cookies = {
    'sessionid': 'xxxx'
}

# 请求URL
url = 'https://www.example.com'

# 发送请求
response = requests.get(url, headers=headers, cookies=cookies)

# 输出响应内容
print(response.text)
5. 使用验证码识别库

有些网站需要进行验证码识别,我们可以使用OCR等技术进行识别。这里我们使用Python中的Tesseract-OCR库对验证码进行识别。

python">import requests
import pytesseract
from PIL import Image

# 设置User-Agent头
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'}

# 请求验证码图片
url = 'https://www.example.com/captcha.png'
response = requests.get(url, headers=headers)

# 保存验证码图片
with open('captcha.png', 'wb') as f:
    f.write(response.content)

# 对验证码图片进行识别
captcha_image = Image.open('captcha.png')
captcha_text = pytesseract.image_to_string(captcha_image)

# 输出验证码文本
print(captcha_text)
6. 动态解析页面

有些网站会在前端使用JS异步加载数据,此时需要使用Selenium等工具对页面进行动态解析。这里我们使用Python中的Selenium库来模拟浏览器访问网站。

python">from selenium import webdriver

# 设置User-Agent头
options = webdriver.ChromeOptions()
options.add_argument(
    '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')

# 请求URL
url = 'https://www.example.com'

# 使用Selenium打开网页
driver = webdriver.Chrome(options=options)
driver.get(url)

# 执行JS代码
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# 获取响应内容
response = driver.page_source

# 输出响应内容
print(response)

# 关闭浏览器
driver.quit()
7. 多账号轮流使用

如果一个账号频繁访问被封禁,我们可以使用多个账号轮流访问网站。这里我们使用Python中的random库来随机选择账号。

python">import requests
import random

# 用户列表
users = [
    {'username': 'user1', 'password': 'password1'},
    {'username': 'user2', 'password': 'password2'},
    {'username': 'user3', 'password': 'password3'}
]

# 随机选择一个账号
user = random.choice(users)

# 构造登录信息
data = {
    'username': user['username'],
    'password': user['password']
}

# 请求登录URL
login_url = 'https://www.example.com/login'
response = requests.post(login_url, data=data)

# 输出响应内容
print(response.text)

总结

总的来说,伪装的目的是让爬虫看起来更像人类行为,反“反爬”的目的是应对复杂的反爬虫机制。在实际爬虫项目中,需要根据具体情况选择合适的伪装和反“反爬”技巧。


http://www.niftyadmin.cn/n/4932335.html

相关文章

未来混合动力汽车的发展:技术探索与前景展望

随着环境保护意识的增强和对能源消耗的关注,混合动力汽车成为了汽车行业的研发热点。混合动力汽车融合了传统燃油动力和电力动力系统,通过优化能源利用效率,既降低了燃油消耗和排放,又提供了更长的续航里程。本文将探讨混合动力汽…

C++异常使用

异常关键字: try:在try部可检测异常 catch:当发现异常捕获处 throw:抛出异常处 noexcept:被修饰函数内部不会发生异常 允许抛出和捕捉各种类型的数据。 int main() {try{func();}catch(const char*e){ //捕捉字符…

Java课题笔记~ 会话跟踪

3.1 Cookie 【案例1 记住密码】 实现效果 当勾选“记住密码”复选框时,下次访问登录页面,会自动记住账号,密码信息。 【案例2 上次访问时间】 实现效果 首次登录,显示“欢迎您,XXX” 下次登录,显示“欢迎您…

【前端】CSS水平居中的6种方法

文章目录 flex绝对定位margin:auto绝对定位margin:负值定位transformtext-align: center;margin: 0 auto;思维导图 后文&#xff1a;【前端】CSS垂直居中的7种方法_karshey的博客-CSDN博客 左右两边间隔相等的居中 flex display: flex;justify-content: center; <div clas…

算法备案后,企业需要做什么?合规与执行挑战

随着技术的迅猛发展&#xff0c;算法已经成为多数企业核心竞争力的一部分。但在技术进步的同时&#xff0c;我们也面临了算法透明度、公平性以及安全性的问题。因此&#xff0c;许多国家已经开始实施算法备案制度&#xff0c;以确保算法的应用满足一定的标准和规范。但在完成算…

Spring Boot | 使用mkcert本地生成SSL证书配置后端接口为HTTPS协议

Tips&#xff1a;本篇博客是 Windows 版本的使用教程&#xff0c;cmd 中执行的命令前缀是下载的软件名称&#xff0c;需要改成自己下载软件的名称&#xff01; 下载软件 首先去 GitHub 仓库中下载软件&#xff0c;下载完成后将文件保存在英文路径下的文件夹&#xff0c;之后以…

系统架构设计专业技能 · 软件工程(一)【系统架构设计师】

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;二&#xff09;【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

Sqlite3简介

SQLite3 简介 SQLite3 是一种轻量级的嵌入式数据库引擎&#xff0c;被广泛应用于各种应用程序中&#xff0c;包括移动设备、桌面应用程序和嵌入式系统。它以其简单、高效和零配置的特点而受到开发者的喜爱。 以下是 SQLite3 的一些重要特点&#xff1a; 嵌入式数据库引擎&…