Python爬蟲(chóng)實(shí)戰(zhàn)入門(mén)五:獲取JS動(dòng)態(tài)內(nèi)容—爬取今日頭條

之前我們爬取的網(wǎng)頁(yè),多是HTML靜態(tài)生成的內(nèi)容,直接從HTML源碼中就能找到看到的數(shù)據(jù)和內(nèi)容现拒,然而并不是所有的網(wǎng)頁(yè)都是這樣的。

有一些網(wǎng)站的內(nèi)容由前端的JS動(dòng)態(tài)生成望侈,由于呈現(xiàn)在網(wǎng)頁(yè)上的內(nèi)容是由JS生成而來(lái)印蔬,我們能夠在瀏覽器上看得到,但是在HTML源碼中卻發(fā)現(xiàn)不了脱衙。比如今日頭條:

瀏覽器呈現(xiàn)的網(wǎng)頁(yè)是這樣的:

今日頭條

查看源碼侥猬,卻是這樣的:

HTML源碼

網(wǎng)頁(yè)的新聞在HTML源碼中一條都找不到例驹,全是由JS動(dòng)態(tài)生成加載。

遇到這種情況退唠,我們應(yīng)該如何對(duì)網(wǎng)頁(yè)進(jìn)行爬取呢鹃锈?有兩種方法:

1、從網(wǎng)頁(yè)響應(yīng)中找到JS腳本返回的JSON數(shù)據(jù)瞧预;2屎债、使用Selenium對(duì)網(wǎng)頁(yè)進(jìn)行模擬訪問(wèn)

在此只對(duì)第一種方法作介紹,關(guān)于Selenium的使用垢油,后面有專門(mén)的一篇盆驹。

一、從網(wǎng)頁(yè)響應(yīng)中找到JS腳本返回的JSON數(shù)據(jù)

即使網(wǎng)頁(yè)內(nèi)容是由JS動(dòng)態(tài)生成加載的滩愁,JS也需要對(duì)某個(gè)接口進(jìn)行調(diào)用躯喇,并根據(jù)接口返回的JSON數(shù)據(jù)再進(jìn)行加載和渲染。

所以我們可以找到JS調(diào)用的數(shù)據(jù)接口硝枉,從數(shù)據(jù)接口中找到網(wǎng)頁(yè)中最后呈現(xiàn)的數(shù)據(jù)廉丽。

就以今日頭條為例來(lái)演示:

1、從找到JS請(qǐng)求的數(shù)據(jù)接口

F12打開(kāi)網(wǎng)頁(yè)調(diào)試工具

網(wǎng)頁(yè)調(diào)試工具

選擇“網(wǎng)絡(luò)”選項(xiàng)卡后檀咙,發(fā)現(xiàn)有很多響應(yīng)雅倒,我們篩選一下璃诀,只看XHR響應(yīng)弧可。

(XHR是Ajax中的概念,表示XMLHTTPrequest)

然后我們發(fā)現(xiàn)少了很多鏈接劣欢,隨便點(diǎn)開(kāi)一個(gè)看看:

我們選擇city棕诵,預(yù)覽中有一串json數(shù)據(jù):

我們?cè)冱c(diǎn)開(kāi)看看:

原來(lái)全都是城市的列表,應(yīng)該是加載地區(qū)新聞之用的凿将。

現(xiàn)在大概了解了怎么找JS請(qǐng)求的接口的吧校套?但是剛剛我們并沒(méi)有發(fā)現(xiàn)想要的新聞,再找找看:

有一個(gè)focus牧抵,我們點(diǎn)開(kāi)看看:

與首頁(yè)的圖片新聞呈現(xiàn)的數(shù)據(jù)是一樣的笛匙,那么數(shù)據(jù)應(yīng)該就在這里面了。

看看其他的鏈接:

這應(yīng)該是熱搜關(guān)鍵詞

這個(gè)就是圖片新聞下面的新聞了犀变。

我們打開(kāi)一個(gè)接口鏈接看看:

返回一串亂碼妹孙,但從響應(yīng)中查看的是正常的編碼數(shù)據(jù):

有了對(duì)應(yīng)的數(shù)據(jù)接口,我們就可以仿照之前的方法對(duì)數(shù)據(jù)接口進(jìn)行請(qǐng)求和獲取響應(yīng)了

2获枝、請(qǐng)求和解析數(shù)據(jù)接口數(shù)據(jù)

先上完整代碼:

# coding:utf-8

import requests

import json

url = 'http://www.toutiao.com/api/pc/focus/'

wbdata = requests.get(url).text

data = json.loads(wbdata)

news = data['data']['pc_feed_focus']

for n in news:

title = n['title']

img_url = n['image_url']

url = n['media_url']

print(url,title,img_url)

返回出來(lái)的結(jié)果如下:

照例蠢正,稍微講解一下代碼:

代碼分為四部分,

第一部分:引入相關(guān)的庫(kù)

# coding:utf-8

import requests

import json

第二部分:對(duì)數(shù)據(jù)接口進(jìn)行http請(qǐng)求

url = 'http://www.toutiao.com/api/pc/focus/'

wbdata = requests.get(url).text

第三部分:對(duì)HTTP響應(yīng)的數(shù)據(jù)JSON化省店,并索引到新聞數(shù)據(jù)的位置

data = json.loads(wbdata)

news = data['data']['pc_feed_focus']

第四部分:對(duì)索引出來(lái)的JSON數(shù)據(jù)進(jìn)行遍歷和提取

for n in news:

title = n['title']

img_url = n['image_url']

url = n['media_url']

print(url,title,img_url)

如此嚣崭,就完成了從JS網(wǎng)頁(yè)中爬取數(shù)據(jù)笨触。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雹舀,隨后出現(xiàn)的幾起案子芦劣,更是在濱河造成了極大的恐慌,老刑警劉巖说榆,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件持寄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡娱俺,警方通過(guò)查閱死者的電腦和手機(jī)稍味,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)荠卷,“玉大人模庐,你說(shuō)我怎么就攤上這事∮鸵耍” “怎么了掂碱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)慎冤。 經(jīng)常有香客問(wèn)我疼燥,道長(zhǎng),這世上最難降的妖魔是什么蚁堤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任醉者,我火速辦了婚禮,結(jié)果婚禮上披诗,老公的妹妹穿的比我還像新娘撬即。我一直安慰自己,他們只是感情好呈队,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布剥槐。 她就那樣靜靜地躺著,像睡著了一般宪摧。 火紅的嫁衣襯著肌膚如雪粒竖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天几于,我揣著相機(jī)與錄音蕊苗,去河邊找鬼。 笑死孩革,一個(gè)胖子當(dāng)著我的面吹牛岁歉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锅移,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼熔掺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起非剃,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤置逻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后备绽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體券坞,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年肺素,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恨锚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倍靡,死狀恐怖猴伶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塌西,我是刑警寧澤他挎,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站捡需,受9級(jí)特大地震影響办桨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜站辉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一呢撞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庵寞,春花似錦狸相、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逸尖。三九已至古沥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娇跟,已是汗流浹背岩齿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苞俘,地道東北人盹沈。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吃谣,于是被迫代替她去往敵國(guó)和親乞封。 傳聞我的和親對(duì)象是個(gè)殘疾皇子做裙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,912評(píng)論 2 89
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)肃晚。 注意:講述HT...
    kismetajun閱讀 27,449評(píng)論 1 45
  • “下一個(gè)锚贱,尹天賜!” 這一下关串,所有的目光都集中在了尹天賜的身上拧廊,眾人都看出來(lái)他與歐陽(yáng)鯤的關(guān)系不一般,不由得也對(duì)他...
    喬治李日天閱讀 308評(píng)論 0 0
  • 滿腦子都是空的 因?yàn)樘o了 該上學(xué)的都去了上學(xué) 該打工的都去了打工 耳邊傳來(lái)響亮的鳥(niǎo)叫聲 偶爾摩托聲一生長(zhǎng)鳴 回聲...
    柳君子閱讀 207評(píng)論 0 2
  • 我是不是應(yīng)該以平常心對(duì)待
    歡貓貓閱讀 203評(píng)論 0 0