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

前言

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

 

1. User-Agent伪装

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

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库可以方便地设置代理服务器。

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库可以方便地设置访问时间间隔。

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。

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库对验证码进行识别。

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库来模拟浏览器访问网站。

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库来随机选择账号。

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.mzph.cn/news/32754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4. PDO和SDO的概念和用途

文章四:CANopen PDO与SDO:高效数据传输与同步 最近开始学习CANOpen相关的知识,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun/。 本人学习canopen过程中珍藏了一下资料,分享出来与大家学习…

Go语言使用cron/v3实现定时任务

一、获取cron/v3包 go get github.com/robfig/cron/v3v3.0.0安装v3版本的cron包。 二、创建cron调度器 使用cron.New()创建一个新的Cron调度器: c : cron.New()三、添加定时任务 使用AddFunc方法添加定时任务,参数是cron表达式和任务函数: c.AddFunc("* * * * *&quo…

SaaS系统相比传统软件,为何数据更安全?

随着云计算、5G等技术的不断进步,SaaS行业步入了快速发展的阶段,应用场景也日趋多元化。预计2023年底,中国SaaS行业市场规模将达到555.1亿元。 中研网对于SaaS发展态势预测这样评价: 当前,我国在多个维度上具备发展 S…

RabbitMQ的安装-centos环境

1.定义 RabbitMQ是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑RabbitMQ是一个快递站,一个快递员…

【力扣每日一题】2023.8.11 矩阵对角线元素的和

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们一个矩阵,让我们把矩阵对角线上的元素都加起来返回。 那么矩阵的对角线是有两条的,一条是从左上到右下…

python解决8皇后问题

def is_valid(queens, row, col):for i in range(row):if queens[i] == col or abs(queens[i] - col) == abs(i - row):return Falsereturn Truedef solve_n_queens(n, row, queens, result):if row == n:result.append(queens[:]) # 将当前解添加到结果中returnfor col in ra…

html 计算器界面

其他链接&#xff1a; https://www.freecodecamp.org/news/how-to-build-an-html-calculator-app-from-scratch-using-javascript-4454b8714b98/ https://codepen.io/pen/tour/welcome/start 下面展示一些 内联代码片。 <!DOCTYPE html> <html lang"en">…

npm常用命令

npm -v&#xff1a;查看 npm 版本 npm init&#xff1a;初始化后会出现一个 Package.json 配置文件&#xff0c;可以在后面加上 -y&#xff0c;快速跳到问答界面 npm install&#xff1a;会根据项目中的 package.json 文件自动给下载项目中所需的全部依赖 npm insall 包含 -…

linux4.0新增32位ARM的系统调用

修改内核源码 Linux系统为每一个系统调用赋予一个系统调用号。当应用程序执行一个系统调用时&#xff0c;应用程序就可以知道执行和调用到哪个系统调用了&#xff0c;从而不会造成混乱。系统调用号一旦分配之后就不会有任何变更&#xff0c;否则已经编译好的应用程序就不能运行…

Unity游戏源码分享-精品即时战略游戏_官网60美刀素材

Unity游戏源码分享-精品即时战略游戏_官网60美刀素材 下载地址&#xff1a;https://download.csdn.net/download/Highning0007/88204017

chrome V3 插件开发 基础

目录 准备popup通信popup 发消息给 backgroundpopup 发消息给 content长期连接 如何页面上添加一个按钮&#xff1f;tabs.onUpdatedcontent-script.jsinject.js 右键菜单chrome.contextMenus举个例子添加关于报错&#xff08;cannot create item with duplicate id XXX&#xf…

elementUi select下拉框触底加载异步分页数据

在Element UI中&#xff0c;可以通过监听select下拉框的visible-change事件来实现触底加载下一页的效果。 方式一&#xff1a;利用elementUi的事件 具体步骤如下&#xff1a; 首先&#xff0c;在select组件中设置&#xff1a;visible-change"handleVisibleChange"…

react-media如何使用

介绍 react-media 是 React 中用于响应式设计的一个很好的库。它可以用于在视口宽度满足特定条件时渲染组件。 主要功能包括: 媒体查询:通过 minWidth, maxWidth 和 width 等设置媒体查询条件。 渲染组件:当媒体查询条件匹配时渲染子组件。 默认样式:可以设置默认渲染的组件。…

Shell 教程

Shell 教程 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务。 Ke…

大语言模型 GPT历史简介

得益于数据、模型结构以及并行算力的发展&#xff0c;大语言模型应用现今呈井喷式发展态势&#xff0c;大语言神经网络模型成为了不可忽视的一项技术。 GPT在自然语言处理NLP任务上取得了突破性的进展&#xff0c;扩散模型已经拥有了成为下一代图像生成模型的代表的潜力&#x…

vue-pdf实现pdf文件在线预览

在日常的工作中在线预览 PDF 文件的需求是很多的&#xff0c;下面介绍一下使用 vue-pdf 实现pdf文件在线预览 使用 npm 安装 vue-pdf npm install vue-pdf 使用 vue-pdf 显示 PDF 文件 <template><div><pdf :src"url"></pdf></div>…

uniapp之当你问起“tab方法触发时eventchange也跟着触发了咋办”时

我相信没有大佬会在这个问题上卡两个小时吧&#xff0c;记下来大家就当看个乐子了。 当时问题就是&#xff0c;点击tab头切换的时候&#xff0c;作为tab滑动事件的eventchange同时触发了&#xff0c;使得接口请求了两次 大概是没睡好&#xff0c;我当时脑子老想着怎么阻止它冒…

【从零开始学习JAVA | 第四十五篇】反射

目录 前言&#xff1a; ​反射&#xff1a; 使用反射的步骤&#xff1a; 1.获取阶段&#xff1a; 2.使用阶段&#xff1a; 反射的应用场景&#xff1a; 使用反射的优缺点&#xff1a; 总结&#xff1a; 前言&#xff1a; Java中的反射是一项强大而灵活的功能&#xff0…

Leetcode.2789 合并后数组中的最大元素

题目链接 Leetcode.2789 合并后数组中的最大元素 rating : 1485 题目描述 给你一个下标从 0 0 0 开始、由正整数组成的数组 n u m s nums nums 。 你可以在数组上执行下述操作 任意 次&#xff1a; 选中一个同时满足 0 ≤ i < n u m s . l e n g t h − 1 0 \leq i &l…

Android Framework工具——EA画图

EA 是一个著名的企业架构(Enterprise Architecture)工具,用于绘制和管理企业的架构图和过程模型。该工具提供了多种功能,包括建立业务流程图、数据流图、组织结构图、应用架构图等。EA工具可帮助企业进行战略规划、业务流程改进和系统开发等活动。 一、用例图 1、创建项目…