一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

小白學(xué) Python 爬蟲(17):Requests 基礎(chǔ)使用

 易禪浮屠 2022-03-04

人生苦短,我用 Python

引言

在前面的前置準(zhǔn)備中,我們安裝了好多第三方的請求庫,如 Request 、 AioHttp 等,不知各位同學(xué)還有印象不,沒印象的同學(xué)可以翻翻前面的文章。

前面幾篇文章我們大致了解了 urllib 的基本用法,其中確實有很多使用不便的地方,如處理 Cookies 或者使用代理訪問的時候,都需要使用 Opener 和 Handler 來處理。

這時,更加強大的 Request 庫的出現(xiàn)就順理成章。有了 Request 庫,我們可以更加簡單方便的使用這些高階操作。

簡介

首先還是各種官方地址敬上:

這里列出各種官方文檔的目的是希望各位同學(xué)能養(yǎng)成查閱官方文檔的習(xí)慣,畢竟小編也是人,也會犯錯,相比較而言,官方文檔的錯誤率會非常低,包括有時候一些疑難問題都能通過官方文檔來解決。

各種基礎(chǔ)概念我們已經(jīng)在介紹 urllib 基礎(chǔ)使用的時候都介紹過了,這里也就不再多 BB ,直接進(jìn)入干貨環(huán)節(jié):寫代碼

這里我們使用的測試地址依然事前面提到過的:https:/// 。

GET 請求

GET 請求是我們最常用的請求,先來了解一下如何使用 Requests 發(fā)送一個 GET 請求。代碼如下:

import requests

r = requests.get('https:///get')
print(r.text)

結(jié)果如下:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "", 
    "User-Agent": "python-requests/2.22.0"
  }, 
  "origin": "116.234.254.11, 116.234.254.11", 
  "url": "https:///get"
}

這里就不多講了,和前面的 urllib 是一樣的。

如果我們想在 GET 請求中添加請求參數(shù),需要如何添加呢?

import requests

params = {
    'name': 'geekdigging',
    'age': '18'
}

r1 = requests.get('https:///get', params)
print(r1.text)

結(jié)果如下:

{
  "args": {
    "age": "18", 
    "name": "geekdigging"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "", 
    "User-Agent": "python-requests/2.22.0"
  }, 
  "origin": "116.234.254.11, 116.234.254.11", 
  "url": "https:///get?name=geekdigging&age=18"
}

可以看到,請求的鏈接被自動構(gòu)造成了:https:///get?name=geekdigging&age=18

值得注意的一點是, r1.text 返回的數(shù)據(jù)類型是 str 類型,但是實際上是一個 json ,如果想直接將這個 json 轉(zhuǎn)化成我們可以直接使用的字典格式,可以使用以下方法:

print(type(r1.text))
print(r1.json())
print(type(r.json()))

結(jié)果如下:

<class 'str'>
{'args': {'age': '18', 'name': 'geekdigging'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': '', 'User-Agent': 'python-requests/2.22.0'}, 'origin': '116.234.254.11, 116.234.254.11', 'url': 'https:///get?name=geekdigging&age=18'}
<class 'dict'>

添加請求頭:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
    'referer': 'https://www./'
}
r2 = requests.get('https:///get', headers = headers)
print(r2.text)

結(jié)果如下:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "", 
    "Referer": "https://www./", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
  }, 
  "origin": "116.234.254.11, 116.234.254.11", 
  "url": "https:///get"
}

與 urllib.request 一樣,我們也是通過 headers 參數(shù)來傳遞頭信息。

如果我們想要抓取一張圖片或者一個視頻這種文件,可以怎么做呢?

這些文件本質(zhì)上都是由二進(jìn)制碼組成的,由于有特定的保存格式和對應(yīng)的解析方式,我們才可以看到這些形形色色的多媒體。所以,想要抓取它們,就要拿到它們的二進(jìn)制碼。

比如我們抓取一張百度上的 logo 圖片,圖片地址為:https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png

import requests

r3 = requests.get("https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png")
with open('baidu_logo.png', 'wb') as f:
    f.write(r3.content)

結(jié)果小編就不展示了,可以正常下載。

POST 請求

我們接著來介紹一個非常常用的 POST 請求。和上面的 GET 請求一樣,我們依然使用: https:///post 進(jìn)行測試。示例代碼如下:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
    'referer': 'https://www./'
}

params = {
    'name': 'geekdigging',
    'age': '18'
}

r = requests.post('https:///post', data = params, headers = headers)
print(r.text)

結(jié)果如下:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "age": "18", 
    "name": "geekdigging"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "23", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "", 
    "Referer": "https://www./", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
  }, 
  "json": null, 
  "origin": "116.234.254.11, 116.234.254.11", 
  "url": "https:///post"
}

我們在這個 POST 請求中添加了請求頭和參數(shù)。

Response 響應(yīng)

上面我們使用過 text 和 json 來獲取響應(yīng)內(nèi)容,除了這兩個,還有很多屬性和方法可以用來獲取其他信息。

我們來訪問百度首頁演示一下:

import requests

r = requests.get('https://www.baidu.com')
print(type(r.status_code), r.status_code)
print(type(r.headers), r.headers)
print(type(r.cookies), r.cookies)
print(type(r.url), r.url)
print(type(r.history), r.history)

結(jié)果如下:

<class 'int'> 200
<class 'requests.structures.CaseInsensitiveDict'> {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'Keep-Alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Thu, 05 Dec 2019 13:24:11 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:23:55 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}
<class 'requests.cookies.RequestsCookieJar'> <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
<class 'str'> https://www.baidu.com/
<class 'list'> []

這里分別打印輸出 status_code 屬性得到狀態(tài)碼,輸出 headers 屬性得到響應(yīng)頭,輸出 cookies 屬性得到 Cookies ,輸出 url 屬性得到 URL ,輸出 history 屬性得到請求歷史。

示例代碼

本系列的所有代碼小編都會放在代碼管理倉庫 Github 和 Gitee 上,方便大家取用。

示例代碼-Github

示例代碼-Gitee

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    久久国产精品热爱视频| 在线免费国产一区二区| 日韩中文字幕视频在线高清版| 免费一级欧美大片免费看| 91人妻人人澡人人人人精品| 黄片免费播放一区二区| 一区二区三区欧美高清| 国产精品成人一区二区三区夜夜夜| 好吊日视频这里都是精品| 视频一区日韩经典中文字幕| 青青草草免费在线视频| 一级片二级片欧美日韩| 日韩一区中文免费视频| 五月婷婷综合缴情六月| 精品少妇一区二区三区四区| 欧美丰满大屁股一区二区三区| 极品熟女一区二区三区| 中文字幕乱码免费人妻av| 国产三级欧美三级日韩三级| 精品香蕉一区二区在线| 91欧美亚洲视频在线| 日本不卡在线视频你懂的| 人妻巨大乳一二三区麻豆| 欧美激情床戏一区二区三| 国产欧美日韩在线精品一二区| 精品国产91亚洲一区二区三区| 国产真人无遮挡免费视频一区| 欧美精品中文字幕亚洲| 少妇人妻精品一区二区三区| 婷婷色网视频在线播放| 高清一区二区三区不卡免费| 色婷婷视频免费在线观看| 老司机精品福利视频在线播放| 亚洲天堂一区在线播放| 91老熟妇嗷嗷叫太91| 国产成人精品一区二区三区| 亚洲中文字幕高清视频在线观看| 午夜小视频成人免费看| 久草热视频这里只有精品| 国产av天堂一区二区三区粉嫩| 国产av精品高清一区二区三区|