Python爬蟲——Urllib庫-2

編解碼

問題引入

例如:

https://www.baidu.com/s?wd=章若楠

https://www.baidu.com/s?wd=%E7%AB%A0%E8%8B%A5%E6%A5%A0

第二部分的一串亂碼就是章若楠

如果這里是寫的章若楠就會

產生這樣的錯誤

所以我們就可以使用get請求方式的quote方法了

get請求方式的quote()方法

urllib.parse.quote("章若楠"):可將參數中的中文變成Unicode編碼
import urllib.request
import urllib.parseurl = "https://www.baidu.com/s?wd="headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}
# 將周杰倫三個字變成Unicode格式
# 我們需要依賴于urllib.parse
name = urllib.parse.quote("章若楠")
# 拼接一下得到最終的字符串
url = url + name# 因為urlopen()方法不能存儲字典,所以headers無法傳入
# 請求對象的定制
request = urllib.request.Request(url=url, headers=headers)
# 模擬瀏覽器發送請求
response = urllib.request.urlopen(request)
# 獲取響應的內容
content = response.read().decode("utf-8")print(content)

成功查詢出來結果?


get請求的urlencode方法

應用場景:多個參數時

例如如下URL有章若楠和女兩個參數,也可以使用quote,但是比較麻煩

url = "https://www.baidu.com/s?wd=章若楠&sex=女"

但是如果使用urlencode方法就比較容易;呃

data = {"wd": "章若楠","sex": "女",
}
a = urllib.parse.urlencode(data)
print(a)

整體代碼示例?

import urllib.request
import urllib.parseurl = "https://www.baidu.com/s?"data = {"wd": "章若楠","sex": "女","location": "浙江"
}
new_data = urllib.parse.urlencode(data)
# 請求資源路徑
url = url + new_dataheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}# 請求對象的定制
request = urllib.request.Request(url=url, headers=headers)# 模擬瀏覽器發送請求
response = urllib.request.urlopen(request)# 獲取網頁源碼數據
content = response.read().decode("utf-8")
print(content)

post請求百度翻譯

(1)post請求的參數需要進行編碼

new_data = urllib.parse.urlencode(data)

(2)參數放置在請求對象定制的參數中

request = urllib.request.Request(url=url, data=new_data, headers=headers)

(3)編碼之后需要調用encode方法,否則會報錯

new_data = urllib.parse.urlencode(data).encode("utf-8")

????????但是即使是加了encode將data編碼之后,打印出來的內容還是亂碼,這時候就需要將content從字符串轉換成JSON對象了

整體代碼如下:

import urllib.request
import urllib.parse
import json# post請求
url = "https://fanyi.baidu.com/sug"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}data = {"kw": "spider",
}
# post請求的 參數需要進行編碼
new_data = urllib.parse.urlencode(data).encode("utf-8")# 請求對象的定制
# post請求的參數 不拼接在URL的后面,而是放在請求對象定制的參數中
request = urllib.request.Request(url=url, data=new_data, headers=headers)# 模擬瀏覽器發送請求
response = urllib.request.urlopen(request)# 獲取網頁源碼數據
content = response.read().decode("utf-8")# 將字符串轉換為JSON對象
obj = json.loads(content)
print(obj)

post請求百度翻譯之詳細翻譯

百度翻譯存在一個詳細翻譯,位置下圖課可見

然后我們一頓操作就可以得到下面代碼

import urllib.request
import urllib.parse
import json# post請求
url = "https://fanyi.baidu.com/v2transapi?from=en&to=zh"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}data = {"from": "en","to": "zh","query": "love","transtype": "realtime","simple_means_flag": "3","sign": "198772.518981","token": "cdd52406abbf29bdf0d424e2889d9724","domain": "common","ts": "1709212364268"
}
# post請求的 參數需要進行編碼
new_data = urllib.parse.urlencode(data).encode("utf-8")# 請求對象的定制
# post請求的參數 不拼接在URL的后面,而是放在請求對象定制的參數中
request = urllib.request.Request(url=url, data=new_data, headers=headers)# 模擬瀏覽器發送請求
response = urllib.request.urlopen(request)# 獲取響應的數據
content = response.read().decode("utf-8")# 將字符串轉換為JSON對象
obj = json.loads(content)
print(obj)

再得到如下的結果

wdf,發生了什么? ?o((⊙﹏⊙))o

被反扒拿下了又? o(╥﹏╥)o

那么來看請求頭,

????????這么多東西都是真實的瀏覽器需要發送過去的東西,而我們只發送了一個User-Agent,顯然是被識破了

然后把這些參數都加入到header之中

headers = {"Accept": "*/*",# "Accept-Encoding": "gzip, deflate, br, zstd","Accept-Language": "zh-CN,zh;q=0.9","Acs-Token": "1709208007739_1709212364277_2rynw+ePk52zCeBqFrnpVyboCMK+LPtSWG7fFss9tB46byfbwCQfYELvJyCkm1etX3UxQpeq1u0RZgDNoBMV4TZMgoBePG0jlPUTwV8YiGfTxR3L02wu6DP3wBEe6UBFONiLTSWESnmEOBRoQ3yX7KBs+A8w1QV8BHgguDCGc9Q/foG9jowZncaCVGl2AYTUbzGjkPg8xb4EZ62L2FIjpVZ1oVatDtgSFqtAVEO5W3z7tRVaI0JxFF2kkhw6bxnVHPNSiSkoKD3AXdrFhj2GatPAyn9YXlLw20qoyE+UjZIyRat4xdWkFsdTG/kvPlVLTh7qoabs+NaNVC8a21dlyWxgBsmrTbUEojKiYyaURQG0COiv/u0teilELxPLCo+FwatSE0yD8alqLGXSbi6v/yOOphDWau7zRYMynAEaxaLrQTuOgHfvllflSel+GMBctvdS6RtLdhQb+pIa3Sp1c8C2JvJ/DM/1Th2s+7pdaqE=","Connection": "keep-alive","Content-Length": "152","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Cookie": 'BIDUPSID=2DC3FD925EDB9E9310057AAA4313A978; PSTM=1679797623; BAIDUID=2DC3FD925EDB9E939299595287C491C9:FG=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; MCITY=-75%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=2DC3FD925EDB9E939299595287C491C9:FG=1; ZFY=KUd37zEBYu5HusDOqV1jxs1znlRRBUOop2UvOac44TU:C; RT="z=1&dm=baidu.com&si=8d0cddbe-c90e-4db5-b3a0-3fd3a4f6ea21&ss=lt6jrqb7&sl=3&tt=rei&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&nu=9y8m6cy&cl=6qwh&ld=6pgv&ul=7z34&hd=7z3q"; BA_HECTOR=2k802l8l0l010184242k04a598vrdh1iu0cmp1t; H_PS_PSSID=40009_39661_40206_40211_40215_40222_40246_40274_40294_40289_40286_40317_40080; PSINO=1; delPer=0; APPGUIDE_10_6_9=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1709210293; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1709210293; ab_sr=1.0.1_MGY0MDFkY2E0MjFjNzAwODk0Yjg1NTk1M2ZmYmUxMjlmMGEyZGRjNTk0MDM4NWE2NmM0ZmQzNzE4NzhhMDBhZWM5M2QxNDEwNzljNjhlNTE1MThhMTg3OWI0NmQ4OTAwOTlhMGExODIxNWM3ZDVmNmJmZTQ1MTIyM2JkNDIzMTRhOWMzYzM2ZTFjZTcyZDQ4MTUxNzBlZjE2NmFmODczYw==',"Host": 'fanyi.baidu.com',"Origin": 'https://fanyi.baidu.com',"Referer": 'https://fanyi.baidu.com/?ext_channel=DuSearch',"Sec-Ch-Ua": '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"','Sec-Ch-Ua-Mobile': '?0','Sec-Ch-Ua-Platform': '"Windows"','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-origin','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36','X-Requested-With': 'XMLHttpRequest'
}

我們成功了嗎!!!

并沒有,怎么了呢

這里的編碼格式并沒有utf-8,所以我們不要攜帶這一行參數

????????但是這里你把這里百分之九十的東西刪除了都行,只留下一個cookie即可,因為這里只有cookie被用來驗證了。

import urllib.request
import urllib.parse
import json# post請求
url = "https://fanyi.baidu.com/v2transapi?from=en&to=zh"headers = {# "Accept": "*/*",# "Accept-Encoding": "gzip, deflate, br, zstd",# "Accept-Language": "zh-CN,zh;q=0.9",# "Acs-Token": "1709208007739_1709212364277_2rynw+ePk52zCeBqFrnpVyboCMK+LPtSWG7fFss9tB46byfbwCQfYELvJyCkm1etX3UxQpeq1u0RZgDNoBMV4TZMgoBePG0jlPUTwV8YiGfTxR3L02wu6DP3wBEe6UBFONiLTSWESnmEOBRoQ3yX7KBs+A8w1QV8BHgguDCGc9Q/foG9jowZncaCVGl2AYTUbzGjkPg8xb4EZ62L2FIjpVZ1oVatDtgSFqtAVEO5W3z7tRVaI0JxFF2kkhw6bxnVHPNSiSkoKD3AXdrFhj2GatPAyn9YXlLw20qoyE+UjZIyRat4xdWkFsdTG/kvPlVLTh7qoabs+NaNVC8a21dlyWxgBsmrTbUEojKiYyaURQG0COiv/u0teilELxPLCo+FwatSE0yD8alqLGXSbi6v/yOOphDWau7zRYMynAEaxaLrQTuOgHfvllflSel+GMBctvdS6RtLdhQb+pIa3Sp1c8C2JvJ/DM/1Th2s+7pdaqE=",# "Connection": "keep-alive",# "Content-Length": "152",# "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Cookie": 'BIDUPSID=2DC3FD925EDB9E9310057AAA4313A978; PSTM=1679797623; BAIDUID=2DC3FD925EDB9E939299595287C491C9:FG=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; MCITY=-75%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=2DC3FD925EDB9E939299595287C491C9:FG=1; ZFY=KUd37zEBYu5HusDOqV1jxs1znlRRBUOop2UvOac44TU:C; RT="z=1&dm=baidu.com&si=8d0cddbe-c90e-4db5-b3a0-3fd3a4f6ea21&ss=lt6jrqb7&sl=3&tt=rei&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&nu=9y8m6cy&cl=6qwh&ld=6pgv&ul=7z34&hd=7z3q"; BA_HECTOR=2k802l8l0l010184242k04a598vrdh1iu0cmp1t; H_PS_PSSID=40009_39661_40206_40211_40215_40222_40246_40274_40294_40289_40286_40317_40080; PSINO=1; delPer=0; APPGUIDE_10_6_9=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1709210293; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1709210293; ab_sr=1.0.1_MGY0MDFkY2E0MjFjNzAwODk0Yjg1NTk1M2ZmYmUxMjlmMGEyZGRjNTk0MDM4NWE2NmM0ZmQzNzE4NzhhMDBhZWM5M2QxNDEwNzljNjhlNTE1MThhMTg3OWI0NmQ4OTAwOTlhMGExODIxNWM3ZDVmNmJmZTQ1MTIyM2JkNDIzMTRhOWMzYzM2ZTFjZTcyZDQ4MTUxNzBlZjE2NmFmODczYw==',# "Host": 'fanyi.baidu.com',# "Origin": 'https://fanyi.baidu.com',# "Referer": 'https://fanyi.baidu.com/?ext_channel=DuSearch',# "Sec-Ch-Ua": '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',# 'Sec-Ch-Ua-Mobile': '?0',# 'Sec-Ch-Ua-Platform': '"Windows"',# 'Sec-Fetch-Dest': 'empty',# 'Sec-Fetch-Mode': 'cors',# 'Sec-Fetch-Site': 'same-origin',# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',# 'X-Requested-With': 'XMLHttpRequest'
}data = {"from": "en","to": "zh","query": "love","transtype": "realtime","simple_means_flag": "3","sign": "198772.518981","token": "cdd52406abbf29bdf0d424e2889d9724","domain": "common","ts": "1709212364268"
}
# post請求的 參數需要進行編碼
new_data = urllib.parse.urlencode(data).encode("utf-8")# 請求對象的定制
# post請求的參數 不拼接在URL的后面,而是放在請求對象定制的參數中
request = urllib.request.Request(url=url, data=new_data, headers=headers)# 模擬瀏覽器發送請求
response = urllib.request.urlopen(request)# 獲取響應的數據
content = response.read().decode("utf-8")# 將字符串轉換為JSON對象
obj = json.loads(content)
print(obj)

????????這個就是百度翻譯所需的驗證,看見沒有連UA甚至都不需要,這就是各種網站的反扒機制需要不同的headers的數值,百度網盤只需要一個cookie


總結

累了,以后再總結ヾ( ̄▽ ̄)Bye~Bye~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713464.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

laravel ApiResponse接口統一響應封裝

一&#xff0c;新增接口返回碼配置文件 在config中新增配置文件apicode.php <?phpreturn [ apicodes>[/*** Message("OK")* 對成功的 GET、PUT、PATCH 或 DELETE 操作進行響應。也可以被用在不創建新資源的 POST 操作上*/HTTP_OK > 200,/*** Message(&qu…

使用el-form之表單校驗自動定位到報錯位置問題,,提升用戶體驗

需求描述 由于需要填寫的表單項太多&#xff0c;提交的時候校驗不通過&#xff0c; 如果沒填寫的表單項在最上面&#xff0c;用戶看不到不知道發生了啥&#xff0c; 所以需要將頁面滾動定位到第一個報錯的表單項位置&#xff0c;提升用戶體驗實現步驟 1. 給form表單添加ref …

數據中心GPU集群高性能組網技術分析

數據中心GPU集群組網技術是指將多個GPU設備連接在一起&#xff0c;形成一個高性能計算的集群系統。通過集群組網技術&#xff0c;可以實現多個GPU設備之間的協同計算&#xff0c;提供更大規模的計算能力&#xff0c;適用于需要大規模并行計算的應用場景。 常用的組網技術&…

1209. 帶分數 刷題筆記

思路 暴力匹配 讀入目標數 n 看n是否與ab/c相等 因為c里面的除法是整除 我們將 nab/c 轉換為 c*na*cb 那么如何獲得a,b&#xff0c;c 依題意 a&#xff0c;b&#xff0c;c三個數由1-9九個數字組成 且每個數字只能出現一次 由此 我們可以搜出123456789的全部排列方式…

我做的app上架應用市場一天,快破400下載量,0差評

上集說到&#xff0c;我做了一個叫QB音樂的安卓app&#xff0c;經過一段時間的自我使用與測試終于算發布了。我昨天順便把它上架了奇妙應用市場&#xff0c;截止目前3月1號過去了一天&#xff0c;下載量快到400&#xff0c;0差評。看來還是能正常使用的。 一、為什么做這個ap…

CleanMyMac X2024免費Mac電腦清理和優化工具

CleanMyMac X是一款專業的 Mac 清理和優化工具&#xff0c;它具備一系列強大的功能&#xff0c;可以幫助用戶輕松管理和維護他們的 Mac 電腦。以下是一些關于 CleanMyMac X 的主要功能和特點&#xff1a; 智能清理&#xff1a;CleanMyMac X 能夠智能識別并清理 Mac 上的無用文件…

深入剖析k8s-Pod篇

為什么需要Pod&#xff1f; 進程是以進程組的方式組織在一起。受限制容器的“單進程模型”&#xff0c; 成組調用沒有被妥善處理&#xff08;資源調用有限&#xff09;&#xff0c;使用資源囤積則導致復雜度上升。 在k8s項目中&#xff0c;Pod的實現需要使用一個中間容器——…

css【詳解】—— 圣杯布局 vs 雙飛翼布局 (含手寫清除浮動 clearfix)

兩者功能效果相同&#xff0c;實現方式不同 效果預覽 兩側寬度固定&#xff0c;中間寬度自適應&#xff08;三欄布局&#xff09;中間部分優先渲染允許三列中的任意一列成為最高列 圣杯布局 通過左右欄填充容器的左右 padding 實現&#xff0c;更多細節詳見注釋。 <!DOCTYP…

《無線網絡技術》考試版筆記

第一章 無線網絡介紹 什么是多徑效應&#xff0c;如何去克服&#xff1a; 在發射機和接收機之間沒有明顯的直線路徑時&#xff0c;就會產生多徑傳播。如果兩個信號彼此疊加&#xff0c;那么接收設備就無法正確解調信號&#xff0c;無法還原為它的原始數據形式。 可以稍微調整接…

【leetcode熱題】求根到葉子節點數字之和

難度&#xff1a; 中等通過率&#xff1a; 40.6%題目鏈接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 題目描述 給定一個二叉樹&#xff0c;它的每個結點都存放一個 0-9 的數字&#xff0c;每條從根到葉子節點的路徑都代表一個數字。 例如&#xff0c;從根到葉子…

Linux包管理dpkg、apt和snap

dpkg、apt和snap都是Ubuntu系統中用于軟件管理的工具&#xff0c;但它們在功能和使用上有一些區別。 dpkg: dpkg是Debian包管理系統的底層工具&#xff0c;也是apt和其他高級包管理工具的基礎。主要功能是用于安裝、卸載、配置和構建Debian軟件包&#xff08;.deb文件&#xff…

vue面試題:Computed 和 Watch 的區別?

Computed 和 Watch 的區別? 對于Computed&#xff1a;對于Watch&#xff1a;immediate&#xff1a;組件加載立即觸發回調函數deep&#xff1a;深度監聽&#xff0c;發現數據內部的變化&#xff0c;在復雜數據類型中使用&#xff0c;例如數組中的對象發生變化。需要注意的是&am…

USLE模型-LS因子的計算

目錄 計算坡度計算填洼計算流向計算水流長度計算水平投影![在這里插入圖片描述](https://img-blog.csdnimg.cn/direct/75e015b2d6874ce9b6652f2b8730b90f.png)計算可變的坡度指數m計算坡長因子L計算坡度因子S計算LS因子參考視頻 計算坡度 準備好30米分辨率的dem 計算填洼 計…

速看!深夜悄悄分享一個電力優化代碼集合包!

代碼集合包如下&#xff1a; 主從博弈的智能小區定價策略及電動汽車調度策略 碳交易機制下的綜合能源優化調度 兩階段魯棒優化算法的微網多電源容量配置 冷熱電多能互補綜合能源系統優化調度 考慮預測不確定性的綜合能源調度優化 考慮柔性負荷的綜合能源系統低碳經濟優化調度 考…

MySQL深入——24

Join語句到底可不可用 join語句用于兩個或多個表當中檢索數據。 INNER JOIN或者JOIN 當兩個表當中有匹配的值時&#xff0c;返回行 LEFT JOIN或者LEFT OUTER JOIN 返回所有左邊的行&#xff0c;即使右表當中沒有相匹配的行 RIGHT JOIN或者RIGHT OUTER JOIN 返回所有右邊的…

整數的分離與合成

整數是由數字和數位組成的&#xff0c;比如327是一個三位數&#xff0c;它的數字是3、2、7,數位是個數、十位、百位。 經常有些題目考查將一個整數拆分成各個數字&#xff0c;以及將各個數字合成一個整數&#xff0c;下面分別就此討論。 注&#xff1a;只考慮正整數&#xff…

C語言學生成績信息管理系統【結構體+文本】

功能描述&#xff1a; 1、錄入成績 2、顯示不及格學生信息 3、統計每檔學生數量 4、總成績統計 代碼&#xff1a; #include<stdio.h>#define N 30//結構體&#xff1a;typedef struct STUDENT{char id[10];//學號char name[20];//姓名float score[3];//三門成績,分別代…

Socket網絡編程(四)——點對點傳輸場景方案

目錄 場景如何去獲取到TCP的IP和Port&#xff1f;UDP的搜索IP地址、端口號方案UDP搜索取消實現相關的流程&#xff1a;代碼實現邏輯服務端實現客戶端實現UDP搜索代碼執行結果 TCP點對點傳輸實現代碼實現步驟點對點傳輸測試結果 源碼下載 場景 在一個局域網當中&#xff0c;不知…

生成式人工智能治理:入門的基本技巧

GenAI 以前所未有的速度調解并擾亂了“一切照舊”&#xff0c;同時帶來了令人難以置信的力量&#xff0c;但也帶來了不可否認的責任。當然&#xff0c;現代企業非常熟悉技術進步。然而&#xff0c;人工智能的到來&#xff08;和實施&#xff09;無疑引起了相當大的沖擊&#xf…

C# 12 中的新增功能

本文內容 主構造函數集合表達式ref readonly 參數默認 Lambda 參數 顯示另外 5 個 C# 12 包括以下新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 8 SDK 嘗試這些功能。 主構造函數 - 在 Visual Studio 2022 版本 17.6 預覽版 2 中引入。 集合表達式 - 在 Visu…