pythonrequests跳轉
A. 如何用python requests 爬取網頁所有文字
您可以用requests庫的get方法,以請求的網址為參數,獲取網頁所有html代碼,再訪問結果是text屬性即可。
B. Python爬蟲筆記(二)requests模塊get,post,代理
import requests
base_url = 'https://www..com'
response = requests.get(base_url)
url=請求url,
headers =請求頭字典,
params = 請求參數字典。
timeout = 超時時長,
)---->response對象
伺服器響應包含:狀態行(協議,狀態碼)、響應頭,空行,響應正文
字元串格式:response.text
bytes類型:response.content
response.headers['cookie']
response.text獲取到的字元串類型的響應正文,
其實是通過下面的步驟獲取的:
response.text = response.content.decode(response.encoding)
產生的原因:編碼和解碼的編碼格式不一致造成的。
str.encode('編碼')---將字元串按指定編碼解碼成bytes類型
bytes.decode('編碼')---將bytes類型按指定編碼編碼成字元串。
a、response.content.decode('頁面正確的編碼格式')
<meta http-equiv="content-type" content="text/html;charset=utf-8">
b、找到正確的編碼,設置到response.encoding中
response.encoding = 正確的編碼
response.text--->正確的頁面內容。
a、沒有請求參數的情況下,只需要確定url和headers字典。
b、get請求是有請求參數。
在chrome瀏覽器中,下面找query_string_params,
將裡面的參數封裝到params字典中。
c、分頁主要是查看每頁中,請求參數頁碼欄位的變化,
找到變化規律,用for循環就可以做到分頁。
requests.post(
url=請求url,
headers = 請求頭字典,
data=請求數據字典
timeout=超時時長
)---response對象
post請求一般返回數據都是json數據。
(1)response.json()--->json字元串所對應的python的list或者dict
(2)用 json 模塊。
json.loads(json_str)---->json_data(python的list或者dict)
json.mps(json_data)--->json_str
post請求能否成功,關鍵看**請求參數**。
如何查找是哪個請求參數在影響數據獲取?
--->通過對比,找到變化的參數。
變化參數如何找到參數的生成方式,就是解決這個ajax請求數據獲取的途徑。
**尋找的辦法**有以下幾種:
(1)寫死在頁面。
(2)寫在js中。
(3)請求參數是在之前的一條ajax請求的數據裡面提前獲取好的。
代理形象的說,他是網路信息中轉站。
實際上就是在本機和伺服器之間架了一座橋。
a、突破自身ip訪問現實,可以訪問一些平時訪問不到網站。
b、訪問一些單位或者團體的資源。
c、提高訪問速度。代理的伺服器主要作用就是中轉,
所以一般代理服務裡面都是用內存來進行數據存儲的。
d、隱藏ip。
ftp代理伺服器---21,2121
HTTP代理伺服器---80,8080
SSL/TLS代理:主要用訪問加密網站。埠:443
telnet代理 :主要用telnet遠程式控制制,埠一般為23
高度匿名代理:數據包會原封不動轉化,在服務段看來,就好像一個普通用戶在訪問,做到完全隱藏ip。
普通匿名代理:數據包會做一些改動,伺服器有可能找到原ip。
透明代理:不但改動數據,還會告訴服務,是誰訪問的。
間諜代理:指組織或者個人用於記錄用戶傳輸數據,然後進行研究,監控等目的的代理。
proxies = {
'代理伺服器的類型':'代理ip'
}
response = requests.get(proxies = proxies)
代理伺服器的類型:http,https,ftp
代理ip:http://ip:port
C. python requests庫中的post詳解
一、post請求及響應詳解
返回結果:
大家看,其實通過post發送請求很簡單
下面再講講返回信息的具體內容
大家看,其實有很多的返回值參數,其實我們實際中能用到的並不多,我下邊一一列舉出來了
response.json():返回信息的格式是json,應為我們請求的時候是json格式,返回的也是一個json,如果返回報錯,應該是開發的介面出錯了
response.text:如果response.json,可以使用text調試一下,看看具體的返回內容是什麼,這里看到的都是字元串了
response.status_code:返回的http狀態碼,200是成功,404是未找到介面路徑,500是伺服器錯誤,等等
response.url:返回請求時的url地址
response.headers:返回伺服器給你的響應header
response.cookies:返回伺服器給你的cookies,這是一個多麼好的獲取cookie的方法啊,
response.content:同response.text是一樣的
二、post請求中的其他參數
復制
import requests
res = requests.post(url="url",data="body",timeout=30,verfiy=False)
print(res.json())
url:請求的全路徑地址,一定是要完整的路徑哦
data:請求的內容,如果是json的格式,最好使用json.mps,反序列化一下,避免格式錯誤,如果是其他格式,就都是字元串了
timeout:設置超時時間,這樣我們在自動化測試和爬蟲的時候,當達到了設置的超時時間,我們的程序就退出不會一直等待了,可以做其他操作了
verfiy:如果請求的介面是https協議,這個參數就很好用了,如果設置該參數為True,那麼我們的腳本就是要配置CA證書,建議參數值為False,好用又簡單
好了,post的請求詳解就這些了,歡迎大家點贊留言,我會給大家解答疑問的
D. 利用python的requests庫如何獲取post後伺服器返回的headers信息
1、在用python的requests庫時利用post模擬上傳數據網站會跳轉到另外一個網站在做頁面分析時發現。
2、可從伺服器返回的響應標頭中找到該url請問如何獲得post後伺服器返回的headers信息。
E. post python requests 怎樣處理302跳轉
requests默認行為是追蹤301/302重定向,已經跳轉到了最終的URL,自然沒有Location,看requests的手冊,作者寫了怎麼拿到這個跳轉記錄
F. python requests 常用方法
requests 繼承了urllib2的所有特性,比urllib簡潔高效
requests所有功能都能通過"requests/api.py"中的方法訪問
1、安裝:
pip install requests
2、get請求:
封裝鏈接中的參數,請求時用params參數進行傳遞
url = " http://www..com "
resp = requests.get(url,params=,headers=)
3、post請求:
發送的數據必須放在字典中,通過data參數進行傳遞
url = " http://www..com "
resp = requests.post(url,data=,headers=)
4、查看響應內容:
print (resp.text ) # resp.text 返回的是Unicode格式的數據
print(resp.json()) # res.json() 返回的是json格式的數據
print(resp.content) # resp.content返回的位元組類型數據
print (resp.url) # 查看完整url地址
print (resp.encoding) # 查看響應頭部字元編碼
print(resp.status_code) # 查看響應碼
print(resp.cookies) # 查看返回的cookies
print(resp.r.elapsed) #響應速度,從發送請求到響應到達所需要的時間
5、Cookies
import requests
url = " http://www..com "
resp = requests.get(url)
cookiejar = resp.cookies # 返回cookies對象
cookiedic = requests.utils.dict_from_cookiejar(cookiejar) # 將cookies轉為字典
6、Sission
說明
1、發送請求前先創建一個session會話,將請求到的cookies存入session中
2、程序的請求要一直使用session.get/post,以保證cookies在程序中的傳遞
3、程序的請求如果使用requests.get/post需要在參數中增加headers{"cookie:":"****"},否則請求會報錯,因為requests.get/post每次執行都會重新開啟一個新的請求,丟失已獲取的cookies
例子:登錄17小說網拿到書架數據
import requests
session = requests.session() # 創建會話(session),將cookie存入session中
data = {
"loginName": "1 7",
"password": "1 5"
}
url = " https://passport.17k.com/ck/user/login "
resp1 = session.post(url,data=data) # 登錄,獲取cookies
resp2 = session.get(" https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919 ")
print(resp2.json())
7、防盜鏈處理
防盜鏈,本質上是溯源,即本次請求的上一次請求,請求時將referer地址加上即可
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36",
"Referer":" https://www.pearvideo.com/video_1734919 " # 防盜鏈:溯源,確認當前請求的上一級
}
G. python3.5 urllib.request 怎麼禁止301,302跳轉
Python code?
class SmartRedirectHandler(urllib2.HTTPRedirectHandler): 1
def http_error_301(self, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301( 2
self, req, fp, code, msg, headers)
result.status = code 3
return result
def http_error_302(self, req, fp, code, msg, headers): 4
result = urllib2.HTTPRedirectHandler.http_error_302(
self, req, fp, code, msg, headers)
result.status = code
return result
H. python requests庫如何處理302重定向
你的意思是希望requests報告302?
r = requests.get(url, allow_redirects=False)
r.status_code
r.headers['Location']