Python爬蟲基礎(chǔ)(一)

本文簡單介紹了requests的基本使用,python爬蟲中requests模塊絕對是是最好用的網(wǎng)絡(luò)請求模塊覆享,可以忘記以前學(xué)的urllib和urllib3

requests的安裝

pip install requests

response對象

屬性 說明
r.status_code HTTP請求的返回狀態(tài),200表示連接成功,其它表示失敗
r.text url對應(yīng)的html文本
r.encoding html的編碼方式
r.apparent_encoding 備選編碼方式
r.content http響應(yīng)內(nèi)容的二進制形式
r.url 對應(yīng)的url
r.cookies 返回生成的cookies

發(fā)送請求

一開始導(dǎo)入Requests模塊

import requests

GET請求

r = requests.get(url, params=None, **kwargs)

url:擬獲取頁面的url鏈接
params:url中的額外參數(shù)纹份,字典或字節(jié)流格式
**kwargs: 12個可控制訪問的參數(shù)

此時得到了r的Response對象帽衙,我們可以根據(jù)這個對象的屬性獲取索要信息精拟。

我們不妨看一下requests中g(shù)et方法的實現(xiàn)

def get(url, params=None, **kwargs):
    r"""Sends a GET request.

    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """

    kwargs.setdefault('allow_redirects', True)
    return request('get', url, params=params, **kwargs)

舉例說明最常用的方式

>>> import requests
>>> r = requests.get("https://www.baidu.com")
>>> 

POST請求

r = requests.post(url, data = {"key": "value"})

構(gòu)建URL

如果手工構(gòu)建URL,那么數(shù)據(jù)會以鍵值的形式在URL的問號后面滚躯,Requests可以通過params來構(gòu)建URL胃惜。例如在百度上查詢Requests庫后,其網(wǎng)頁鏈接應(yīng)該是類似這樣的

https://www.baidu.com/s?wd=requests&rsv_spt=1&rsv_iqid=0xa4190d6100037ee8&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=7&rsv_sug1=6&rsv_sug7=100&rsv_sug2=1&prefixsug=reques&rsp=0&inputT=5095&rsv_sug4=7054&rsv_sug=1

搜索后的網(wǎng)頁應(yīng)該是這樣的


image

我們把URL主體留下來鼎姐,再次查詢

https://www.baidu.com/s?wd=requests

網(wǎng)頁反饋


image

發(fā)現(xiàn)兩個網(wǎng)頁頁面完全一樣钾麸,仔細(xì)看看上面wd=requests,這其實就是上面介紹可以用鍵值的方式炕桨,wd就是鍵饭尝,而requests就是值,可以同params構(gòu)建完整URL献宫,簡要舉例說明用法

params = {"wd": "requests"}
url = "https://www.baidu.com"
r = requests.get(url, params=params)

二進制響應(yīng)內(nèi)容

對非文本請求钥平,可以以字節(jié)的訪問,例如下載圖片遵蚜,這里提供兩種方式
方法一

import requests
from PIL import Image
from io import BytesIO
r = requests.get("https://upload-images.jianshu.io/upload_images/14198966-452601202f9ecebf.jpg")
img = Image.open(ByteIO(r.content))
img.save(path)

方法二

import requests
r = requests.get("https://upload-images.jianshu.io/upload_images/14198966-452601202f9ecebf.jpg")
with open(path, "wb") as f:
    f.write(r.content)

定制請求頭

在反爬蟲機制中帖池,檢查headers里面的元素是比較普遍的手段,可以通過F12來查看header進而添加header來應(yīng)對簡單的反爬蟲


image
import requests
headers = {"User-Agent": " Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0"}
r = requests.get(url, headers=headers)

Cookie

當(dāng)某個響應(yīng)中包含一些cookie吭净,cookie是用來銜接一個頁面與另一個頁面的關(guān)系睡汹,比如說當(dāng)我登錄以后, 瀏覽器為了保存登錄信息, 將這些信息存放在了 cookie 中. 然后我訪問第二個頁面的時候, 保存的 cookie 被調(diào)用, 服務(wù)器知道之前做了什么, 瀏覽了些什么。有兩種方式攜帶cookie

方法一寂殉,以手動的方式附帶cookie

r = requests.get(url, cookies=cookies)

方法二囚巴,通過Session自帶cookie

s = requests.Session()
r = s.get(url)

參考:

1.https://morvanzhou.github.io/tutorials/data-manipulation/scraping/3-01-requests/#%E7%99%BB%E5%BD%95

2.https://2.python-requests.org//zh_CN/latest/user/quickstart.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市友扰,隨后出現(xiàn)的幾起案子彤叉,更是在濱河造成了極大的恐慌,老刑警劉巖村怪,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秽浇,死亡現(xiàn)場離奇詭異,居然都是意外死亡甚负,警方通過查閱死者的電腦和手機柬焕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門审残,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斑举,你說我怎么就攤上這事搅轿。” “怎么了富玷?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵璧坟,是天一觀的道長。 經(jīng)常有香客問我赎懦,道長雀鹃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任励两,我火速辦了婚禮褐澎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伐蒋。我一直安慰自己工三,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布先鱼。 她就那樣靜靜地躺著俭正,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焙畔。 梳的紋絲不亂的頭發(fā)上掸读,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音宏多,去河邊找鬼儿惫。 笑死,一個胖子當(dāng)著我的面吹牛伸但,可吹牛的內(nèi)容都是我干的肾请。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼更胖,長吁一口氣:“原來是場噩夢啊……” “哼铛铁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起却妨,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤饵逐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彪标,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倍权,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年捞烟,在試婚紗的時候發(fā)現(xiàn)自己被綠了薄声。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萌业。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奸柬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情婴程,我是刑警寧澤廓奕,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站档叔,受9級特大地震影響桌粉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隙咸,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一骡尽、第九天 我趴在偏房一處隱蔽的房頂上張望疤孕。 院中可真熱鬧,春花似錦押逼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沾歪,卻和暖如春漂彤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灾搏。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工挫望, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狂窑。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓媳板,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泉哈。 傳聞我的和親對象是個殘疾皇子拷肌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354