一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python 抓取動態網頁內容方案詳解

Python 抓取動態網頁內容方案詳解

2020-05-17 11:24Python教程網 Python

這篇文章主要介紹了Python 抓取動態網頁內容方案詳解,首先通過Chrome的工具來進行分析,然后再使用python進行處理,最終得到我們需要的內容,非常的方便,這里也算是給大家提供一個思路

用Python實現常規的靜態網頁抓取時,往往是用urllib2來獲取整個HTML頁面,然后從HTML文件中逐字查找對應的關鍵字。如下所示:

 

復制代碼 代碼如下:

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

 

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

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

 

Python 抓取動態網頁內容方案詳解

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

 

復制代碼 代碼如下:

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

 

就抓取不到上述內容了。

我們查看一下這個頁面對應的源碼:

Python 抓取動態網頁內容方案詳解

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

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

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

Python 抓取動態網頁內容方案詳解

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

Python 抓取動態網頁內容方案詳解

因為要獲得不同企業對應的不同信息,那么瀏覽器發送給服務器的請求里面一定會有一個和當前企業id有關的參數。

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

Python 抓取動態網頁內容方案詳解

然而,雙擊打開此文件并不能獲得企業信息,而是一堆代碼。因為沒有對應的參數為它指明要顯示第幾號的信息。如圖:

Python 抓取動態網頁內容方案詳解

那么,應該如何將參數傳遞給它呢?這時我們仍舊看F12窗口:

Python 抓取動態網頁內容方案詳解

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

對目標URL,用POST的方式,傳遞了一個id為162518的參數。

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

“?id=162518”,即

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

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

Python 抓取動態網頁內容方案詳解

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

Python 抓取動態網頁內容方案詳解

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美激烈精交gif动态图18p | 亚洲性69影视 | 2019nv天堂| 久久WWW免费人成一看片 | 久久不射视频 | 91精品国产综合久久香蕉 | 荷兰艾优apiyoo | 国产高清免费午夜在线视频 | 欧美高清在线不卡免费观看 | 白发在线视频播放观看免费 | 91精品啪在线观看国产老湿机 | 成人在线小视频 | 日本高清va不卡视频在线观看 | a片毛片在线免费看 | 国产91素人搭讪系列天堂 | 国产免费丝袜调教视频 | 亚洲狼人香蕉香蕉在线28 | 熟睡迷j系列小说 | 91短视频在线观看2019 | 欧美日韩精品一区二区三区视频播放 | 国产做a爰片久久毛片 | 免费真实播放国产乱子伦 | www视频免费 | 色婷婷网| 99精品国产成人一区二区 | 3d美女触手怪爆羞羞漫画 | 精品日本一区二区 | 日日日操 | 小向美奈子av | 天天草人人草 | 男人肌肌捅女人 | 校园全肉高h湿一女多男 | 狠狠色成人综合网图片区 | 97青草香蕉依人在线播放 | 久久免费观看视频 | 日韩免费在线看 | 扒开老女人 | 高h辣h双处全是肉军婚 | 4455四色永久免费 | 91桃花| 亚洲色图.com |