爬百度图片如何解决{“antiFlag“:1,“message“:“Forbid spider access“}

在学习深度学习的卷积神经算法时,需要猫和狗的训练数据集。这时想到在百度网上爬取猫和狗的图片。

在爬取狗狗图片的时候,我抓包分析了下获取这个url1 “https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=”,然后在该URL返回的信息中获取狗图片的url链接。但是在使用该链接获取的狗图片链接只有30张,这些远远不够训练数据。

我开始抓包分析,后面的图片加载出来的时候是通过url2“https://image.baidu.com/search/acjson?tn=resultjson_com&word=%E7%8B%97%E7%8B%97&ie=utf-8&fp=result&fr=&ala=0&applid=7765865225436197871&pn=30&rn=30&nojc=0&gsm=1e&newReq=1"这个网址来加载的,当pn和rn都等于30时,相当于该网址的第二页。当pn和rn等于60时是该网址的第三页。找到该规律后,就可以通过for循环来获取很多狗狗图片的url.

于是,我将url的地址从url1换成url2,但是在发送request请求时,报b'{"antiFlag":1,"message":"Forbid spider access"}'错误。我爬虫的代码被反爬了。我使用该url2在apifox上运行,apifox上是可以成功返回url2的返回信息的。

即然通过接口可以获取正确的返回值,那通过代码应该也可以获取正确的返回信息。在网上查询Forbid spider access错误信息,有提示说添加丰富headers信息会解决该问题。我将网上headers的相关字段都拔下来发送requests消息,该Forbid spider access错误信息解决了,但是返回的消息都是一段看不懂的字符。

我猜测应该是与编码相关,我查看了下抓包信息response的content-encoding值为br,我尝试了下将'Accept-Encoding':'gzip, deflate, br, zstd',注释掉然后试试。不出所料,注释后就可以正常运行了。

获取img相关url的代码如下:

urls_img = []
for n in range(100):pn = n*30url = "https://image.baidu.com/search/acjson?tn=resultjson_com&word=%E7%8C%AB&ie=utf-8&fp=result&fr=&ala=0&applid=10467951401242802557&pn=" + str(pn) + "&rn=" + str(pn) + "&nojc=0&gsm=5e&newReq=1"print(url)time.sleep(20)payload={}headers = {'Cookie': 'cookie=BDIMGISLOGIN=0; winWH=%5E6_1560x882; BIDUPSID=31E30236016B14E87E80A761DA8D007D; PSTM=1746601325; BAIDUID=31E30236016B14E870600C64626E7373:FG=1; MAWEBCUID=web_zLZtQkKKSPdTpACZxFACKprGPULtIeLcIQMzqvrDsrtFgKqqSu; H_WISE_SIDS_BFESS=62327_62833_63143_63241_63326_63352_63380_63382_63394_63390_63403_63441_63458_63472_63497_63543_63533_63548; BDSFRCVID=laPOJeC62xv16McsstZOeePUug5K4enTH6bHG1IqkxAuf9BSprw9EG0PZM8g0KuhkXxkogKKKgOTHICF_2uxOjjg8UtVJeC6EG0Ptf8g0x5; H_BDCLCKID_SF=JRKqoD-afI83fP36q4bHK-t052T22jnQKGR9aJ5nJDoWfCDCXtb5Kn0lXUo-QpQt5bTi_n58QpP-HlnjDfraMnkF5fD83qJj-jk8Kl0MLUcYbb0xynosMpkbMUnMBMni52OnapTn3fAKftnOM46JehL3346-35543bRTLnLy5KJWMDcnK4-Xj5bWjG5P; delPer=0; PSINO=5; BDSFRCVID_BFESS=laPOJeC62xv16McsstZOeePUug5K4enTH6bHG1IqkxAuf9BSprw9EG0PZM8g0KuhkXxkogKKKgOTHICF_2uxOjjg8UtVJeC6EG0Ptf8g0x5; H_BDCLCKID_SF_BFESS=JRKqoD-afI83fP36q4bHK-t052T22jnQKGR9aJ5nJDoWfCDCXtb5Kn0lXUo-QpQt5bTi_n58QpP-HlnjDfraMnkF5fD83qJj-jk8Kl0MLUcYbb0xynosMpkbMUnMBMni52OnapTn3fAKftnOM46JehL3346-35543bRTLnLy5KJWMDcnK4-Xj5bWjG5P; BA_HECTOR=2k8g8k2k2l0k840g24a10k0kag04061k4khge25; BAIDUID_BFESS=31E30236016B14E870600C64626E7373:FG=1; ZFY=gTCA97ON7I:BQC2pFSM9Q0QHQvSKXixg:BldTCH3HmRJc:C; H_PS_PSSID=62327_62833_63143_63241_63326_63352_63403_63441_63458_63497_63543_63533_63548_63568_63564_63582_63576; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_WISE_SIDS=62327_62833_63241_63352_63441_63458_63564_63582_63576; arialoadData=false; ab_sr=1.0.1_MmM5MzUxNDBhN2I5NGE5MWRjN2JmOTc5ZjU3ODA1NmUwOWQ0Zjg0YmVkODNhYmNhNTk0MjI4MDYxYmIyNGNhYWYzYjY0MDg2NmM0YjBjNzUwNGNjMWI0NGNlYTA5MGYyNWY5MzcwZWM0ZGM1YTg2YmM4YzE5N2ZmODUyMjg5ODU4MTk4YzU3YzgxMmVhNTYwMGEwYTMyNzVmYjIwMmY0MA==','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36','content-type': 'application/json','Accept': 'application/json, text/plain, */*','Host': 'image.baidu.com','Connection': 'keep-alive',# 'Accept-Encoding':'gzip, deflate, br, zstd','Accept-Language':'zh-CN,zh;q=0.9','sec-ch-ua':'"Google Chrome";v="137", "Chromium";v="137", "Not/A)Brand";v="24"','referer':'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%8B%97%E7%8B%97','sec-ch-ua-platform':'macOS'}response = requests.request("GET", url, headers=headers, data=payload)time.sleep(10)print(str(response.content))string_context = str(response.content)format = r'https://img2.baidu.com(.*?)(?=\")'url_second = re.findall(pattern=format,string=string_context)urls_img.append(url_second)
print(urls_img)

怎样在request返回的response信息中获取图片的url链接呢?如下图所示:

这种可以考虑使用正则表达式来获取url的链接,然后使用re.findall()函数将对应的url全找出。

import re
string_context = str(response.content)
format = r'https://img2.baidu.com(.*?)(?=\")'---这个正则表达式是表示将https://img2.baidu.com和“中间字符取出。
url_second = re.findall(pattern=format,string=string_context)
##将url信息存储到json文件中
with open("/Users/zc/PyCharmMiscProject/dataset/cat_urls.json","w") as f:json.dump(urls_img,f)###读取json文件
with open("/Users/zc/PyCharmMiscProject/dataset/cat_urls.json","r") as f:urls_load = json.load(f)print(len(urls_load))因为截取的url链接为/it/u=2826177801,1382156594\\\\u0026fm=253\\\\u0026app=138\\\\u0026f=JPEG?w=500\\\\u0026h=667,我和真实的img链接对比了下,需要将\\\\u0026替换成&,所以还需要对各个链接做相应的处理。我使用了字符串的replace()函数进行处理,还有一种处理方法(即使用str.split("\\\\u0026")对字符串进行分割,然后将分割后的list1组合一起,使用(&).join(list1)函数连接)
###url链接转换
url_format=[]
for i in range(len(urls_load)-1):for j in range(len(urls_load[i])-1):url_new = urls_load[i][j].replace("\\\\u0026","&")url_format.append(url_new)

组合img的链接,然后下载图片并标号。需要注意的是headers_img中的'content-type'为'image/webp'

path = '/Users/zc/PyCharmMiscProject/dataset/cat/'
host_1 = "https://img2.baidu.com"
headers_img = {'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36','content-type':'image/webp'}
for i in range(len(url_format)-1):url_img = host_1 + url_format[i]img_res = requests.request(url=url_img,method='GET',headers=headers_img)if img_res.status_code == 200:img_name = str(i) + ".jpg"with open(path+img_name,'wb') as file:file.write(img_res.content)else:print("it fails to download jpg")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84784.shtml

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

相关文章

QWebEngine

Qt自带的QWebEngine 不支持播放MP4, 需要手动编译QWebEngine模块 不支持播放mp4 // mainwindow.cpp , m_webEngine(new MyWebEngine(this)) void MainWindow::init() { //关闭系统代理,提高速度,采用release会更快QNetworkProxyFactory::setUseSystemConfigurati…

Rust 学习笔记1

Basic基础 actix_web基础 #[get("/favicon")] 获取静态图片 #[get("/welcome")] 简单的欢迎 #`/user/{name}/` basic.rs源码 源码 use std::{convert::Infallible, io};use actix_files::{Files, NamedFile}; use actix_session::{storage::Cooki…

3GPP协议PDF下载

https://www.tech-invite.com/3m38/tinv-3gpp-38.html 可以进入3GPP官网界面,也可以进入PDF下载界面 PDF加载比较慢

高性能服务器程序框架知识梳理

服务器编程框架 服务器程序种类有很多,但是基本框架都一样,核心不同点在于逻辑处理单元。基本框架包含:I/O处理单元、逻辑单元、网络存储单元以及请求队列。 I/O处理单元(主线程):服务器用来管理客户连接…

【AI】从0开始玩转混元3D⼤模型,如何让一张静态实物图片一键转为3D实物图,大模型都表示服了,超级简单易上手,快来试试!

HAI 与 NVIDIA ,为开发者提供一键部署及生图的能力,让开发者体验3D 模型的同时,也了解云的便利性。 混元3D 2.0是腾讯推出的尖端3D⽣成模型,能够创建带有⾼分辨率纹理贴图的⾼保真3D资产 参赛报名:https://marketing.c…

电路图识图基础知识-电动机的保护电路保护方式(二十六)

电动机保护电路是确保电动机安全、可靠运行的关键技术之一。在工业和日常生活中,电动机被广泛应用于各种设备中,其安全运行对于保障生产效率和人身安全至关重要。本文将详细介绍电动机保护电路的重要性、保护方式以及具体的电路分析,以期为电…

【Pandas】pandas DataFrame droplevel

Pandas2.2 DataFrame Reshaping sorting transposing 方法描述DataFrame.droplevel(level[, axis])用于**从 DataFrame 的索引(行或列)中删除指定层级(level)**的方法 pandas.DataFrame.droplevel() pandas.DataFrame.droplev…

Delivering Arbitrary-Modal Semantic Segmentation(CVPR2023)任意模态语义分割论文阅读

文章目录 文章研究思路创建了DeLiVER任意模态分割基准数据集统计信息4种模态25个语义类 提出了任意跨模态分割模型CMNeXt自查询中心(Self-Query Hub,SQ-Hub)并行池化混合器(Parallel Pooling Mixer,PPX) 实…

进程控制

一. 进程创建 1.fork的概念与使用 在 Linux 中 fork 可以在一个进程中创建一个新的进程。这个新进程称为子进程&#xff0c;原进程为父进程。使用前需要包含头文件 #include <unistd.h> 。在调用 fork 函数时&#xff0c;子进程与父进程会共享数据和代码&#xff0c;此…

造轮子系列:从0到1打造生产级HTTP客户端,优雅封装OkHttp/HttpClient,支持异步、重试与文件操作

TechZhi HTTP Client Starter 源码特性快速开始1. 添加依赖2. 配置3. 使用 主要功能支持的HTTP方法文件操作功能高级功能配置示例 API使用示例基本请求自定义请求异步请求文件操作示例错误处理 构建和测试依赖说明 本文将介绍一款本人开发的高性能Spring Boot HTTP客户端Starte…

Java过滤器的基本概念

概述 Java 过滤器是 Java EE (Jakarta EE) 中的一种组件&#xff0c;用于在请求到达 Servlet 或 JSP 之前对其进行预处理&#xff0c;或者在响应返回客户端之前对其进行后处理。过滤器主要应用于以下场景&#xff1a; 请求参数过滤和转换字符编码处理身份验证和授权日志记录压…

gbase8s数据库获取jdbc/odbc协议的几种方式

PROTOCOLTRACEFILED:\sqltrace1.log;PROTOCOLTRACE5 jdbc 参数 &#xff0c;明文协议&#xff0c;并发时 会错乱&#xff0c;适合单线程调试 SQLIDEBUGC:\Users\lenovo\Desktop\sqlidebug.log1 jdbc参数&#xff0c;密文协议&#xff0c;需使用解密工具解析&#xff0c;解析…

【android bluetooth 框架分析 04】【bt-framework 层详解 7】【AdapterProperties介绍】

前面我们提到了 蓝牙协议栈中的 Properties &#xff0c; 这篇文章是 他的补充。 【android bluetooth 框架分析 04】【bt-framework 层详解 6】【Properties介绍】 在 AOSP&#xff08;Android Open Source Project&#xff09;中&#xff0c;AdapterProperties 是一个 Java…

C盘瘦身?

突然发现回收站底部有横幅辣眼睛&#xff01; 点击深度清理跳转C盘瘦身 点击一键瘦身跳转支付 回收站右键还有菜单 回收站右键可以通过设置关闭 回收站底部横幅关不了&#xff01; 流氓没人管了吗&#xff1f;

用户通知服务,轻松实现应用与用户的多场景交互

用户在使用应用时&#xff0c;经常想要了解应用程序在执行的操作&#xff0c;如下载完成、新邮件到达、发布即时的客服支付通知等&#xff0c;这些通知除了携带基本的文本图片信息外&#xff0c;最好还可以支持文件上传下载进度场景下的进度条通知&#xff0c;以及点击通知栏可…

苹果获智能钱包专利,Find My生态版图或再扩张:钱包会“说话”还能防丢

苹果公司近日成功获批一项突破性专利&#xff0c;揭示了一种支持Find My网络的全新智能钱包设计方案。该钱包不仅能智能管理用户的信用卡、身份证等实体卡片&#xff0c;更具备了追踪定位和通过扬声器发声提醒的能力&#xff0c;有望成为苹果“查找”&#xff08;Find My&#…

当机床开始“思考”,传统“制造”到“智造”升级路上的法律暗礁

——首席数据官高鹏律师团队创作&#xff0c;AI辅助 一、被时代推着走的工厂&#xff1a;从“铁疙瘩”到“智能体”的阵痛 某汽车零部件厂的李厂长至今记得三年前的凌晨。为了赶上新能源车企的订单&#xff0c;厂里咬牙引进了两条智能生产线&#xff0c;可调试第三天&#xff…

概率基础——不确定性的数学

第05篇&#xff1a;概率基础——不确定性的数学 写在前面&#xff1a;大家好&#xff0c;我是蓝皮怪&#xff01;前几篇我们聊了统计学的基本概念、数据类型、描述性统计和数据可视化&#xff0c;今天我们要进入统计学的另一个重要基础——概率论。你有没有想过&#xff0c;为什…

爬虫遇到base64编码(非常规版)

一.特征 从 Base64 的核心特性入手&#xff0c;比如它的编码原理&#xff08;将二进制数据转换为 ASCII 字符集&#xff09;和字符集的组成&#xff08;A-Z、a-z、0-9、、/ 和 &#xff09;。这是 Base64 最基础的特点&#xff0c;几乎每个回答都应该包括这些内容。基于 64 个…

节拍定时器是什么?

节拍定时器是什么&#xff1f; 节拍定时器&#xff08;SysTick Timer&#xff09;是嵌入式系统中用于提供精确时间基准的核心硬件组件&#xff0c;尤其在ARM Cortex-M系列处理器中广泛应用。以下是其关键特性和应用的综合说明&#xff1a; ⚙️ 一、核心概念与工作原理 硬件基…