欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統(tǒng) 1643 0

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

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

import urllib2
url=" http://mm.taobao.com/json/request_top_list.htm?type=0&page=1"
up=urllib2.urlopen(url)#打開目標(biāo)頁面,存入變量up
cont=up.read()#從up中讀入該HTML文件
key1='
pa=cont.find(key1)#找出關(guān)鍵字1的位置
pt=cont.find(key2,pa)#找出關(guān)鍵字2的位置(從字1后面開始查找)
urlx=cont[pa:pt]#得到關(guān)鍵字1與關(guān)鍵字2之間的內(nèi)容(即想要的數(shù)據(jù))
print urlx

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

那么,在瀏覽器中打開此頁面:

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第1張圖片

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

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

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

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

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

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第2張圖片

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

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

打開Chrome瀏覽器,按下鍵盤F12即可呼出此工具。如下圖:

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第3張圖片

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

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第4張圖片

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

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

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第5張圖片

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

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第6張圖片

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

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第7張圖片

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

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

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

“?id=162518”,即

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

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

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第8張圖片

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

Python 抓取動(dòng)態(tài)網(wǎng)頁內(nèi)容方案詳解_第9張圖片

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

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

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产亚洲精品一品区99热 | 国产精品久久久久aaaa九色 | 欧美一级日韩 | 久9视频这里只有精品8 | 国产精品观看在线亚洲人成网 | 亚洲视频国产 | 九九线精品视频 | 91久久久久久久久久久 | 一区二区三区四区在线 | 色综合天天综合高清网国产 | 91视频免费观看高清观看完整 | 日韩在线观看免费 | 一区二区三区四区电影 | 一区二区免费看 | 久久久久久久一区二区 | 国产精品三级久久久久久电影 | 亚洲女人天堂 | 久在线播放| 色综合色综合色综合色综合 | 久久久久久久久国产 | 欧美日韩久久 | 国产欧美日韩综合精品一区二区 | 久草在线视频在线 | 免费久久久久 | 久草在线手机 | 欧美日本一区视频免费 | 国产精品久久久久久久久久红粉 | 欧美日韩一区二区三区免费视频 | 亚洲国产aⅴ成人精品无吗 最新国产网址 | 亚洲精品www| 日本久久精品 | 天天影视插插插 | 欧美videosex性欧美成人 | 两女互慰磨豆腐视频在线观看 | 国产成人综合网 | 天天拍天天干 | 国产免费一区 | 天天人人 | 色天天综合网 | 一区二区在线免费观看 | 国产成人精品一区二区三在线观看 |