Chrome Python 抓取動態網頁內容

2022-07-16 19:57:16 字數 2535 閱讀 7799

用python實現常規的靜態網頁抓取時,往往是用urllib2來獲取整個html頁面,然後從html檔案中逐字查詢對應的關鍵字。如下所示:

import

urllib2

url="

"up=urllib2.urlopen(url)#

開啟目標頁面,存入變數up

cont=up.read()#

從up中讀入該html檔案

key1='

'#設定

關鍵字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等方式從資料庫中得到資料,回顯到網頁上。以*****上的「備案資訊」(為例,要抓取此頁面中的某些備案專案。例如「

那麼,在瀏覽器中開啟此頁面:

就抓取不到上述內容了。

我們檢視一下這個頁面對應的原始碼:

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

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

開啟chrome瀏覽器,按下鍵盤f12即可撥出此工具。如下圖:

此時選中「network」標籤,在位址列中輸入此頁面「瀏覽器會分析出此次響應的全過程,而紅框內的檔案,就是此次響應中,瀏覽器和web後端的所有通訊。

因為要獲得不同企業對應的不同資訊,那麼瀏覽器傳送給伺服器的請求裡面一定會有乙個和當前企業id有關的引數。

那麼,引數是多少呢?url上有,是「jsp?id=162518」,問號表示要呼叫引數,後面跟的是id號即是被呼叫的引數。而通過對這幾個檔案的分析,很顯然,企業資訊存在於「indexinvestment.action」檔案中。

然而,雙擊開啟此檔案並不能獲得企業資訊,而是一堆**。因為沒有對應的引數為它指明要顯示第幾號的資訊。如圖:

那麼,應該如何將引數傳遞給它呢?這時我們仍舊看f12視窗:

「header」一欄中明確地顯示出了此次響應的過程:

對目標url,用post的方式,傳遞了乙個id為162518的引數。

我們先手工操作一下。js是如何呼叫引數的呢?對,上面說過:問號+變數名+等號+變數對應的數字。也就是說,向「這個頁面提交id為162518的引數時,應該在url後面加上

「?id=162518」,即

「我們把這個url貼上到瀏覽器中來看:

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

好了,真正的資訊源已經被挖出,剩下的就是用python處理這些頁面上的字串,然後剪下、拼接,重新組成新的《專案備案書》了。

再然後使用for、while等迴圈,批量獲取這些《備案書》。

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

WPF與緩動 四 弧形緩動

wpf與緩動 四 弧形緩動 周銀輝 弧形緩動就是其緩動曲線為一段圓弧,如何我們假設圓弧上的點的斜率為速度的話,那麼可以想像其速度的變化多麼具有戲劇性,其加速或減速來得很突然,與5次緩動差不多.參考以下 圓形緩動 protected override double getcurrentvaluecor...

Employment Planning 動規小練

employment planning 原題鏈結 對於當前月份所需人數,和僱傭最大所需人數之間的情況進行討論。由於解雇金額和僱傭金額的存在,會存在一次性僱傭更多的人以減少解雇金額的情況,所以要討論到所需最大人數。include include include include include incl...

UI動效基礎 AE動效表現課

第01課 ui動效概述 課時1 關於ui動效的介紹及行業概述 課時2 動效設計在工作領域的應用 課時3 動效設計如何學習 第02課 ae軟體基本操作 課時1 介面介紹及合成設定 課時2 合成的建立 課時3 檔案的匯入 課時4 基礎圖層簡介 課時5 形狀圖層的基本操作 課時6 圖層樣式的新增 課時7 ...