當前位置:首頁 » 編程語言 » pythonrequests編碼

pythonrequests編碼

發布時間: 2023-09-13 20:49:39

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 " # 防盜鏈:溯源,確認當前請求的上一級
}

㈡ 請教python 采 集 requests post請求一個第三方介面中文亂碼的問題

你需要寫這行代碼,有可能是你編碼格式設置錯了;

在請求的下面加這行代碼

rsp = requests.get(url,headers = headers)

rsp.encoding = rsp.apparent_encoding

它會自動匹配文檔中的編碼格式,如果還不行你再追問。

㈢ 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

㈣ 如何用python requests post一段字元串

一個http請求包括三個部分,為別為請求行,請求報頭,消息主體,類似以下這樣:

請求行
請求報頭
消息主體

HTTP協議規定post提交的數據必須放在消息主體中,但是協議並沒有規定必須使用什麼編碼方式。服務端通過是根據請求頭中的Content-Type欄位來獲知請求中的消息主體是用何種方式進行編碼,再對消息主體進行解析。具體的編碼方式包括:

  • application/x-www-form-urlencoded
    最常見post提交數據的方式,以form表單形式提交數據。

  • application/json
    以json串提交數據。

  • multipart/form-data
    一般使用來上傳文件。

  • 2.7.1 以form形式發送post請求

    Reqeusts支持以form表單形式發送post請求,只需要將請求的參數構造成一個字典,然後傳給requests.post()的data參數即可。

  • url = 'htt.org/post'd = {'key1': 'value1', 'key2': 'value2'}

  • r = requests.post(url, data=d)

  • print r.text12341234

  • 輸出:

    {
    「args」: {},
    「data」: 「」,
    「files」: {},
    「form」: {
    「key1」: 「value1」,
    「key2」: 「value2」
    },
    「headers」: {
    ……
    「Content-Type」: 「application/x-www-form-urlencoded」,
    ……
    },
    「json」: null,
    ……
    }

    可以看到,請求頭中的Content-Type欄位已設置為application/x-www-form-urlencoded,且d = {'key1': 'value1', 'key2': 'value2'}以form表單的形式提交到服務端,服務端返回的form欄位即是提交的數據。

    2.7.2 以json形式發送post請求

    可以將一json串傳給requests.post()的data參數,

  • url = 'httin.org/post's = json.mps({'key1': 'value1', 'key2': 'value2'})

  • r = requests.post(url, data=s)

  • print r.text12341234

  • 輸出:

    {
    「args」: {},
    「data」: 「{」key2」: 」value2」, 」key1」: 」value1」}」,
    「files」: {},
    「form」: {},
    「headers」: {
    ……
    「Content-Type」: 「application/json」,
    ……
    },
    「json」: {
    「key1」: 「value1」,
    「key2」: 「value2」
    },
    ……
    }

    可以看到,請求頭的Content-Type設置為application/json,並將s這個json串提交到服務端中。

    2.7.3 以multipart形式發送post請求

    Requests也支持以multipart形式發送post請求,只需將一文件傳給requests.post()的files參數即可。

  • url = 'htt.org/post'files = {'file': open('report.txt', 'rb')}

  • r = requests.post(url, files=files)

  • print r.text12341234

  • 輸出:

    {
    「args」: {},
    「data」: 「」,
    「files」: {
    「file」: 「Hello world!」
    },
    「form」: {},
    「headers」: {……
    「Content-Type」: 「multipart/form-data; boundary=」,
    ……
    },
    「json」: null,
    ……
    }

    文本文件report.txt的內容只有一行:Hello world!,從請求的響應結果可以看到數據已上傳到服務端中。

㈤ python3 requests的post請求參數包含中文報錯

問題指明:post請求中文,無法進行編碼,需要對參數進行「utf-8」的編碼

嘗試:按報錯進行解決:

出現問題: 返回的response的中文數據為亂碼

相當亂碼的話,應該是編碼不匹配的問題,嘗試解決:

結果這亂碼更加摸不著頭腦了:

這個問題,一直弄了我一個晚上,太困睡覺,起床後,直到這篇解決我的問題: python 設置requests 編碼,完美解決中文亂碼問題 :

這個請求頭直接印象下面亂碼:

解決分析參考: 從python爬蟲引發出的gzip,deflate,sdch,br壓縮演算法分析

就因為這個,讓我弄了一晚,得到的經驗是: 在測試bug的時候,盡量減少變數,能不要的,就不要

㈥ python裡面request怎麼讀取html代碼

使用Python 3的requests模塊抓取網頁源碼並保存到文件示例:

import requests

ff = open('testt.txt','w',encoding='utf-8')

with open('test.txt',encoding="utf-8") as f:

for line in f:

ff.write(line)

ff.close()


這是演示讀取一個txt文件,每次讀取一行,並保存到另一個txt文件中的示例。

因為在命令行中列印每次讀取一行的數據,中文會出現編碼錯誤,所以每次讀取一行並保存到另一個文件,這樣來測試讀取是否正常。(注意open的時候制定encoding編碼方式)

㈦ Python的requests包在抓取頁面的時候頁面源代碼抓取不完全,頁面數據不是動態載入的。

您好,首先,sys.setdefaultencoding is evil。
其次,不會用 Requests 就去看文檔,不要亂來。
如果 Requests 檢測不到正確的編碼,那麼你告訴它正確的是什麼:
response.encoding = 'gbk'
print response.text
原始內容在 response.content 里,bytes,自己想怎麼處理就怎麼處理。

單個請求完全沒必要用 Session。直接 requests.get(xxx) 就可以了。
最後,弄不明白怎麼處理編碼錯誤的字元串就仔細想想,或者用 Python 3.x,不要散彈槍編程
以下是 Python 3。Python 2 在那個字元串前加個 u 告訴它是 unicode 也一樣。

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:536
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:232
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:532
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726