当前位置: 首页 > news >正文

爬百度图片如何解决{“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.xdnf.cn/news/1020691.html

相关文章:

  • 造成服务器宕机的原因都有哪些?
  • 【评测】Qwen3-Embedding与nomic-embed-text的召回效果对比
  • 光谱数据分析的方法有哪些?
  • Linux配置go环境
  • 比特币的运行机制---第2关:比特币的区块与网络
  • 《编译原理》课程作业
  • 09 - TripletAttention模块
  • 百空间成网 可信数据生态如何重塑数字时代生产关系
  • 基于Docker实现frp之snowdreamtech/frps
  • Linux NFS服务器配置
  • 手阳明大肠经之下廉穴
  • goland 的 dug 设置
  • 我会秘书长杨添天带队赴光明食品集团外高桥食品产业园区考察调研
  • 为何京东与蚂蚁集团竞相申请稳定币牌照?
  • 阿里云服务器操作系统 V3(内核版本 5.10)
  • 数据结构与算法-线性表-线性表的应用
  • electron在单例中实现双击打开文件,并重复打开其他文件
  • leetcode HOT 100(128.连续最长序列)
  • day54 python对抗生成网络
  • C# 结构(属性和字段初始化语句和结构是密封的)
  • C#最佳实践:推荐使用 null 条件运算符调用事件
  • 软考 系统架构设计师系列知识点之杂项集萃(88)
  • 偷懒一下下
  • 在C#中的乐观锁和悲观锁
  • 双碳时代多场景能耗管理实战:数据中心、工业园、商业体如何精准降本?
  • 论坛系统自动化测试
  • C# .NET Core 源代码生成器(dotnet source generators)
  • ROS2编译的理解,与GPT对话
  • 浏览器播放监控画面
  • 【谷歌登录SDK集成】