Web crawler with Python - 04.另一種抓取方式(轉)

作者:xlzd

鏈接:https://zhuanlan.zhihu.com/p/20430122

來源:知乎

著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權查坪,非商業(yè)轉載請注明出處匪凉。

好了宏粤,到上一篇博客跟伏,我們已經能夠順利從網(wǎng)站上抓取一些簡單的數(shù)據(jù)方庭,并將其存儲到文件中。但是在抓取網(wǎng)頁的時候有咨,有時候會發(fā)現(xiàn)HTML中沒有我們需要的數(shù)據(jù)琐簇,這時候如何是好呢?

-------------------------------------

我們的目的是抓取拉勾網(wǎng)Python分類下全國到目前為止展示出來的所有招聘信息座享,首先在瀏覽器點擊進去看看吧婉商。如果你足夠小心或者網(wǎng)速比較慢,那么你會發(fā)現(xiàn)渣叛,在點擊Python分類之后跳到的新頁面上丈秩,招聘信息出現(xiàn)時間是晚于頁面框架出現(xiàn)時間的。到這里淳衙,我們幾乎可以肯定蘑秽,招聘信息并不在頁面HTML源碼中,我們可以通過按下"command+option+u"(在Windows和Linux上的快捷鍵是"ctrl+u")來查看網(wǎng)頁源碼滤祖,果然在源碼中沒有出現(xiàn)頁面展示的招聘信息筷狼。

到這一步瓶籽,我看到的大多數(shù)教程都會教匠童,使用什么什么庫,如何如何模擬瀏覽器環(huán)境塑顺,通過怎樣怎樣的方式完成網(wǎng)頁的渲染汤求,然后得到里面的信息......永遠記住,對于爬蟲程序严拒,模擬瀏覽器往往是下下策扬绪,只有實在沒有辦法了,才去考慮模擬瀏覽器環(huán)境裤唠,因為那樣的內存開銷實在是很大挤牛,而且效率非常低。

那么我們怎么處理呢种蘸?經驗是墓赴,這樣的情況,大多是是瀏覽器會在請求和解析HTML之后航瞭,根據(jù)js的“指示”再發(fā)送一次請求诫硕,得到頁面展示的內容,然后通過js渲染之后展示到界面刊侯。好消息是章办,這樣的請求往往得到的內容是json格式的,所以我們非但不會加重爬蟲的任務,反而可能會省去解析HTML的功夫藕届。

那個挪蹭,繼續(xù)打開Chrome的開發(fā)者工具,當我們點擊“下一頁”之后翰舌,瀏覽器發(fā)送了如下請求:

注意觀察"positionAjax.json"這個請求嚣潜,它的Type是"xhr",全稱叫做"XMLHttpRequest"椅贱,XMLHttpRequest對象可以在不向服務器提交整個頁面的情況下懂算,實現(xiàn)局部更新網(wǎng)頁。那么庇麦,現(xiàn)在它的可能性最大了计技,我們單擊它之后好好觀察觀察吧:

點擊之后我們在右下角發(fā)現(xiàn)了如上詳情,其中幾個tab的內容表示:

Headers:請求和響應的詳細信息

Preview:響應體格式化之后的顯示

Response:響應體原始內容

Cookies:Cookies

Timing:時間開銷

通過對內容的觀察山橄,返回的確實是一個json字符串垮媒,內容包括本頁每一個招聘信息,到這里至少我們已經清楚了航棱,確實不需要解析HTML就可以拿到拉鉤招聘的信息了睡雇。那么,請求該如何模擬呢饮醇?我們切換到Headers這一欄它抱,留意三個地方:

上面的截圖展示了這次請求的請求方式、請求地址等信息朴艰。

上面的截圖展示了這次請求的請求頭观蓄,一般來講,其中我們需要關注的是Cookie / Host / Origin / Referer / User-Agent / X-Requested-With等參數(shù)祠墅。

上面這張截圖展示了這次請求的提交數(shù)據(jù)侮穿,根據(jù)觀察,kd表示我們查詢的關鍵字毁嗦,pn表示當前頁碼亲茅。

那么,我們的爬蟲需要做的事情狗准,就是按照頁碼不斷向這個接口發(fā)送請求克锣,并解析其中的json內容,將我們需要的值存儲下來就好了驶俊。這里有兩個問題:什么時候結束娶耍,以及如何的到json中有價值的內容。

我們回過頭重新觀察一下返回的json饼酿,格式化之后的層級關系如下:

很容易發(fā)現(xiàn)榕酒,content下的hasNextPage即為是否存在下一頁胚膊,而content下的result是一個list,其中的每項則是一條招聘信息想鹰。在Python中紊婉,json字符串到對象的映射可以通過json這個庫完成:

importjsonjson_obj=json.loads("{'key': 'value'}")# 字符串到對象json_str=json.dumps(json_obj)# 對象到字符串

json字符串的"[ ]"映射到Python的類型是list,"{ }"映射到Python則是dict辑舷。到這里喻犁,分析過程已經完全結束,可以愉快的寫代碼啦何缓。具體代碼這里不再給出肢础,希望你可以自己獨立完成,如果在編寫過程中存在問題碌廓,可以聯(lián)系我獲取幫助传轰。

小結

這篇博客介紹了有些數(shù)據(jù)不在HTML源碼中的情況下的抓取方法,適用于一部分情況谷婆。對于數(shù)據(jù)的存儲暫時還是在使用文件慨蛙。到下一篇,我們將使用MongoDB存儲數(shù)據(jù)纪挎,所以在這之間期贫,希望你可以先在本機安裝并配置好MongoDB。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末异袄,一起剝皮案震驚了整個濱河市通砍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌隙轻,老刑警劉巖埠帕,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垢揩,死亡現(xiàn)場離奇詭異玖绿,居然都是意外死亡,警方通過查閱死者的電腦和手機叁巨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門斑匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锋勺,你說我怎么就攤上這事蚀瘸。” “怎么了庶橱?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵贮勃,是天一觀的道長。 經常有香客問我苏章,道長寂嘉,這世上最難降的妖魔是什么奏瞬? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮泉孩,結果婚禮上硼端,老公的妹妹穿的比我還像新娘。我一直安慰自己寓搬,他們只是感情好珍昨,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著句喷,像睡著了一般镣典。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唾琼,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天骆撇,我揣著相機與錄音,去河邊找鬼父叙。 笑死神郊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的趾唱。 我是一名探鬼主播涌乳,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼甜癞!你這毒婦竟也來了夕晓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤悠咱,失蹤者是張志新(化名)和其女友劉穎蒸辆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體析既,經...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡躬贡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了眼坏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拂玻。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宰译,靈堂內的尸體忽然破棺而出檐蚜,到底是詐尸還是另有隱情,我是刑警寧澤沿侈,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布闯第,位于F島的核電站,受9級特大地震影響缀拭,放射性物質發(fā)生泄漏咳短。R本人自食惡果不足惜肃廓,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诲泌。 院中可真熱鬧盲赊,春花似錦、人聲如沸敷扫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葵第。三九已至绘迁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卒密,已是汗流浹背缀台。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哮奇,地道東北人膛腐。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像鼎俘,于是被迫代替她去往敵國和親哲身。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內容