爬百度圖片如何解決{“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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84784.shtml
英文地址,請注明出處:http://en.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; ?? 一、核心概念與工作原理 硬件基…