Python爬蟲(含cookie欺騙)

我對python也是自學(xué)不久胞锰,平常都是用C,有正在學(xué)習(xí)C語言的朋友兢榨,可以進Q群121811911下載軟件資料和視頻嗅榕,我們一起進步。

所需工具準(zhǔn)備

*安裝fiddler

*安裝beautifulsoup4


pip install beautifulsoup4 -i https://pypi.douban.com/simple

*python 中的requests(標(biāo)準(zhǔn)庫)

beautifulsoup用于解析html文檔

bs4可以用于方便地解析html, xml等結(jié)構(gòu)化文檔吵聪,對于http的爬蟲凌那,我們最常用的功能,是解析html文檔吟逝。

如帽蝶,對于以下素材:


<pre style="margin: 8px 0px; color: rgb(51, 51, 51); background-color: rgb(238, 255, 204);">html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a  class="sister" id="link1">Elsie</a>,
<a  class="sister" id="link2">Lacie</a> and
<a  class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""</pre>

經(jīng)過構(gòu)造:


soup = bs4.BeautifulSoup(html_doc, "html.parser")

之后,標(biāo)簽被轉(zhuǎn)化為soup對象中的各個成員块攒。

其次励稳,有多種方法去定位或遍歷標(biāo)簽及標(biāo)簽的屬性佃乘。


#尋找所有a標(biāo)簽,并以list形式返回

In [10]: soup.find_all('a')

Out[10]:

[<a class="sister"  id="link1">Elsie</a>,

 <a class="sister"  id="link2">Lacie</a>,

 <a class="sister"  id="link3">Tillie</a>]

對于tag對象驹尼,有類似字典的方法拿其對應(yīng)的屬性:


In [11]: for tag in soup.find_all('a'):

    ...: print(tag['href'])

    ...:

http://example.com/elsie

http://example.com/lacie

http://example.com/tillie

對于每個標(biāo)簽趣避,可以通過.text屬性,拿到其文本:


In [12]: list_a_tags = soup.find_all('a')

In [13]: list_a_tags[0].text

以下例子新翎,打印出所有class為story的p標(biāo)簽中的text內(nèi)容:


In [21]: for tag in list_p_tags:

    ...: if tag['class'][0] == 'story':

    ...: print(tag.text)

    ...:

Once upon a time there were three little sisters; and their names were

Elsie,

Lacie and

Tillie;

and they lived at the bottom of a well.

...

python中的requests模塊介紹

requests是python自帶的標(biāo)準(zhǔn)庫程帕,使用它,可以很方便得獲取和發(fā)送http包地啰。


import bs4

import requests

import sys

def main():

    if len(sys.argv) != 2:

        print('''

        usage:

            word_lookup.py <word>

        ''')

    else:

        url = 'http://dict.cn/' + sys.argv[1]

        rsp = requests.get(url)

        soup = bs4.BeautifulSoup(rsp.text, 'html.parser')

        div_id_content = soup.find(id='content')

        list_strong = div_id_content.find_all('strong')

        for tag in list_strong:

            print(tag.text)

if __name__ == "__main__":

    main()

http中的get方式與post方式

get方式

get方式的請求愁拭,其客戶端(瀏覽器)發(fā)送的數(shù)據(jù),直接放在url的尾部亏吝,用戶可見岭埠。

post方式

post方式的請求,其客戶端數(shù)據(jù)顺呕,放在http包內(nèi)部枫攀,普通用戶不可見括饶。

requests的作者株茶,同時開發(fā)了一款用于測試的服務(wù)器,稱為httpbin图焰,會響應(yīng)各種http請求并回復(fù)启盛。可以使用www.httpbin.org技羔,也可以參考https://hub.docker.com/r/kennethreitz/httpbin/本地化安裝僵闯。

使用fiddler進行抓包及http協(xié)議分析

每一個session(一個http包),都包含了一個request藤滥,和一個response鳖粟,他們由都分為了兩部分:headers, data拙绊。

fiddler分析的協(xié)議過程向图,就是查看客戶端(瀏覽器)與服務(wù)端到底是如何通信發(fā)包的标沪。

爬蟲一般要盡量完美地模擬真實的瀏覽器發(fā)包過程榄攀。

cookie

cookie是為了網(wǎng)站(服務(wù)端)可以跨頁面記錄用戶信息發(fā)明的一種機制金句。

它使得服務(wù)端有權(quán)限,在客戶端創(chuàng)建記錄信息的小文件(cookies)违寞,而客戶端在與服務(wù)端通信的過程中偶房,會將這些cookies的內(nèi)容,一并讀取并發(fā)給對應(yīng)網(wǎng)站军浆。

這種機制,使得服務(wù)端可以跨頁面記錄用戶的信息瘾敢。

request庫中已經(jīng)提供了可以長期保持狀態(tài)的鏈接方式:


my_session = requests.session() #拿到session對象

my_session.post(url, header_dict, data_dict) #同普通的post或get方法

#不同之處在于, session的記錄有連續(xù)性(自動保存了cookie等)

當(dāng)要爬取有身份驗證(需要登陸)的網(wǎng)站的信息時,一般有兩個大方向:

其一簇抵,通過分析http協(xié)議庆杜,完整模擬出發(fā)包登陸的過程碟摆。

第二,先手工登陸典蜕,再通過復(fù)制cookie,用于之后的session中愉舔,模擬登陸狀態(tài)下的抓取钢猛。

我對python也是自學(xué)不久轩缤,平常都是用C,有正在學(xué)習(xí)C語言的朋友火的,可以進Q群121811911下載軟件資料和視頻壶愤,我們一起進步。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馏鹤,一起剝皮案震驚了整個濱河市征椒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌湃累,老刑警劉巖勃救,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脱茉,居然都是意外死亡剪芥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門琴许,熙熙樓的掌柜王于貴愁眉苦臉地迎上來税肪,“玉大人,你說我怎么就攤上這事∫嫘郑” “怎么了锻梳?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長净捅。 經(jīng)常有香客問我疑枯,道長,這世上最難降的妖魔是什么蛔六? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任荆永,我火速辦了婚禮,結(jié)果婚禮上国章,老公的妹妹穿的比我還像新娘具钥。我一直安慰自己,他們只是感情好液兽,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布骂删。 她就那樣靜靜地躺著,像睡著了一般四啰。 火紅的嫁衣襯著肌膚如雪宁玫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天柑晒,我揣著相機與錄音欧瘪,去河邊找鬼。 笑死敦迄,一個胖子當(dāng)著我的面吹牛恋追,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罚屋,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗅绸!你這毒婦竟也來了脾猛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鱼鸠,失蹤者是張志新(化名)和其女友劉穎猛拴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚀狰,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年跛溉,在試婚紗的時候發(fā)現(xiàn)自己被綠了芳室。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嚎尤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芽死,到底是詐尸還是另有隱情次洼,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布坪哄,位于F島的核電站势篡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏禁悠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一粱坤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧站玄,春花似錦、人聲如沸株旷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梯嗽。三九已至,卻和暖如春灯节,著一層夾襖步出監(jiān)牢的瞬間绵估,已是汗流浹背壹士。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工偿警, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人螟蒸。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓七嫌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诵原。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 目錄: Python網(wǎng)絡(luò)爬蟲(一)- 入門基礎(chǔ)Python網(wǎng)絡(luò)爬蟲(二)- urllib爬蟲案例Python網(wǎng)絡(luò)爬...
    一只寫程序的猿閱讀 12,875評論 17 68
  • 基礎(chǔ)知識 HTTP協(xié)議 我們?yōu)g覽網(wǎng)頁的瀏覽器和手機應(yīng)用客戶端與服務(wù)器通信幾乎都是基于HTTP協(xié)議,而爬蟲可以看作是...
    腩啵兔子閱讀 1,483評論 0 17
  • 上網(wǎng)原理 1吗蚌、爬蟲概念 爬蟲是什麼? 蜘蛛蚯妇,蛆,代碼中硬贯,就是寫了一段代碼,代碼的功能從互聯(lián)網(wǎng)中提取數(shù)據(jù) 互聯(lián)網(wǎng): ...
    riverstation閱讀 8,054評論 1 2
  • Requests快速上手 迫不及待了嗎澄成?本頁內(nèi)容為如何入門 Requests 提供了很好的指引畏吓。其假設(shè)你已經(jīng)安裝了...
    小娟_bb93閱讀 1,469評論 0 3
  • 【原文】(6.27) 子曰:“君子博學(xué)于文菲饼,約之以禮列赎,亦可以弗畔矣夫。” 【通譯】 孔子說:“...
    錢江潮369閱讀 545評論 0 2