最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 抓取動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容方案詳解

 更新時(shí)間:2014年12月25日 08:59:33   投稿:hebedich  
這篇文章主要介紹了Python 抓取動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容方案詳解,首先通過(guò)Chrome的工具來(lái)進(jìn)行分析,然后再使用python進(jìn)行處理,最終得到我們需要的內(nèi)容,非常的方便,這里也算是給大家提供一個(gè)思路

用Python實(shí)現(xiàn)常規(guī)的靜態(tài)網(wǎng)頁(yè)抓取時(shí),往往是用urllib2來(lái)獲取整個(gè)HTML頁(yè)面,然后從HTML文件中逐字查找對(duì)應(yīng)的關(guān)鍵字。如下所示:

復(fù)制代碼 代碼如下:

但是,在動(dòng)態(tài)頁(yè)面中,所顯示的內(nèi)容往往不是通過(guò)HTML頁(yè)面呈現(xiàn)的,而是通過(guò)調(diào)用js等方式從數(shù)據(jù)庫(kù)中得到數(shù)據(jù),回顯到網(wǎng)頁(yè)上。以發(fā)改委網(wǎng)站上的“備案信息”(http://beian.hndrc.gov.cn/)為例,要抓取此頁(yè)面中的某些備案項(xiàng)目。例如“http://beian.hndrc.gov.cn/indexinvestment.jsp?id=162518”。

那么,在瀏覽器中打開(kāi)此頁(yè)面:

相關(guān)信息都顯示的很全了,但是如果按照之前的辦法:

復(fù)制代碼 代碼如下:

up=urllib2.urlopen(url)
cont=up.read()

就抓取不到上述內(nèi)容了。

我們查看一下這個(gè)頁(yè)面對(duì)應(yīng)的源碼:

由源碼可以看出,這個(gè)《備案確認(rèn)書(shū)》屬于“填空”形式的,HTML提供文字模板,js根據(jù)不同的id提供不同的變量,“填入”到文字模板中,形成了一個(gè)具體的《備案確認(rèn)書(shū)》。所以單純抓取此HTML,只能得到一些文字模板,而無(wú)法得到具體內(nèi)容。

那么,該如何找到那些具體內(nèi)容呢?可以利用Chrome的“開(kāi)發(fā)者工具”來(lái)尋找誰(shuí)是真正的內(nèi)容提供者。

打開(kāi)Chrome瀏覽器,按下鍵盤(pán)F12即可呼出此工具。如下圖:

此時(shí)選中“Network”標(biāo)簽,在地址欄中輸入此頁(yè)面“http://beian.hndrc.gov.cn/indexinvestment.jsp?id=162518”,瀏覽器會(huì)分析出此次響應(yīng)的全過(guò)程,而紅框內(nèi)的文件,就是此次響應(yīng)中,瀏覽器和web后端的所有通信。

因?yàn)橐@得不同企業(yè)對(duì)應(yīng)的不同信息,那么瀏覽器發(fā)送給服務(wù)器的請(qǐng)求里面一定會(huì)有一個(gè)和當(dāng)前企業(yè)id有關(guān)的參數(shù)。

那么,參數(shù)是多少呢?URL上有,是“jsp?id=162518”,問(wèn)號(hào)表示要調(diào)用參數(shù),后面跟的是id號(hào)即是被調(diào)用的參數(shù)。而通過(guò)對(duì)這幾個(gè)文件的分析,很顯然,企業(yè)信息存在于“indexinvestment.action”文件中。

然而,雙擊打開(kāi)此文件并不能獲得企業(yè)信息,而是一堆代碼。因?yàn)闆](méi)有對(duì)應(yīng)的參數(shù)為它指明要顯示第幾號(hào)的信息。如圖:

那么,應(yīng)該如何將參數(shù)傳遞給它呢?這時(shí)我們?nèi)耘f看F12窗口:

“Header”一欄中明確地顯示出了此次響應(yīng)的過(guò)程:

對(duì)目標(biāo)URL,用POST的方式,傳遞了一個(gè)id為162518的參數(shù)。

我們先手工操作一下。js是如何調(diào)用參數(shù)的呢?對(duì),上面說(shuō)過(guò):?jiǎn)柼?hào)+變量名+等號(hào)+變量對(duì)應(yīng)的數(shù)字。也就是說(shuō),向“http://beian.hndrc.gov.cn/indexinvestment.action”這個(gè)頁(yè)面提交id為162518的參數(shù)時(shí),應(yīng)該在URL后面加上

“?id=162518”,即

“http://beian.hndrc.gov.cn/indexinvestment.action?id=162518”。

我們把這個(gè)URL粘貼到瀏覽器中來(lái)看:

似乎有了點(diǎn)內(nèi)容,可是都是亂碼啊,怎么破?熟悉的朋友可能一眼就看出來(lái),這是編碼的問(wèn)題。是因?yàn)轫憫?yīng)回來(lái)的內(nèi)容與瀏覽器默認(rèn)的編碼方式不同。只需要在Chrome右上角菜單——更多工具——編碼——“自動(dòng)檢測(cè)”即可。(其實(shí)這是UTF-8的編碼,而Chrome默認(rèn)的是中文簡(jiǎn)體)。如下圖:

好了,真正的信息源已經(jīng)被挖出,剩下的就是用Python處理這些頁(yè)面上的字符串,然后剪切、拼接,重新組成新的《項(xiàng)目備案書(shū)》了。

再然后使用for、while等循環(huán),批量獲取這些《備案書(shū)》。

正如“不論是靜態(tài)網(wǎng)頁(yè),動(dòng)態(tài)網(wǎng)頁(yè),模擬登陸等,都要先分析、搞懂邏輯,再去寫(xiě)代碼”所說(shuō),編程語(yǔ)言只是一個(gè)工具,重要的是解決問(wèn)題的思路。有了思路,再尋找趁手的工具去解決,就OK了。

相關(guān)文章

最新評(píng)論

长顺县| 进贤县| 内乡县| 汝城县| 库尔勒市| 北碚区| 晋江市| 南陵县| 达日县| 瓦房店市| 弥渡县| 漯河市| 泰来县| 芦山县| 方正县| 定日县| 宁南县| 孟津县| 武汉市| 长春市| 拜城县| 东宁县| 会昌县| 游戏| 尤溪县| 青铜峡市| 尉氏县| 桃江县| 马山县| 疏附县| 怀柔区| 江都市| 逊克县| 天长市| 荥经县| 绩溪县| 临城县| 中卫市| 秭归县| 北宁市| 金门县|