python結合chrome抓取動態網頁思路
用Python實現常規的靜態網頁抓取時,往往是用urllib2來獲取整個HTML頁面,然後從HTML檔案中逐字查詢對應的關鍵字。如下所示:
#encoding=utf-8
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”。
那麼,在瀏覽器中開啟此頁面:
相關資訊都顯示的很全了,但是如果按照之前的辦法:
up=urllib2.urlopen(url)
cont=up.read()
就抓取不到上述內容了。
我們檢視一下這個頁面對應的原始碼:
由原始碼可以看出,這個《備案確認書》屬於“填空”形式的,HTML提供文字模板,js根據不同的id提供不同的變數,“填入”到文字模板中,形成了一個具體的《備案確認書》。所以單純抓取此HTML,只能得到一些文字模板,而無法得到具體內容。
那麼,該如何找到那些具體內容呢?可以利用Chrome的“開發者工具”來尋找誰是真正的內容提供者。
開啟Chrome瀏覽器,按下鍵盤F12即可撥出此工具。如下圖:
此時選中“Network”標籤,在位址列中輸入此頁面“http://beian.hndrc.gov.cn/indexinvestment.jsp?id=162518”,瀏覽器會分析出此次響應的全過程,而紅框內的檔案,就是此次響應中,瀏覽器和web後端的所有通訊。
因為要獲得不同企業對應的不同資訊,那麼瀏覽器傳送給伺服器的請求裡面一定會有一個和當前企業id有關的引數。
那麼,引數是多少呢?URL上有,是“jsp?id=162518”,問號表示要呼叫引數,後面跟的是id號即是被呼叫的引數。而通過對這幾個檔案的分析,很顯然,企業資訊存在於“indexinvestment.action”檔案中。
然而,雙擊開啟此檔案並不能獲得企業資訊,而是一堆程式碼。因為沒有對應的引數為它指明要顯示第幾號的資訊。如圖:
那麼,應該如何將引數傳遞給它呢?這時我們仍舊看F12視窗:
“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貼上到瀏覽器中來看:
似乎有了點內容,可是都是亂碼啊,怎麼破?熟悉的朋友可能一眼就看出來,這是編碼的問題。是因為響應回來的內容與瀏覽器預設的編碼方式不同。只需要在Chrome右上角選單——更多工具——編碼——“自動檢測”即可。(其實這是UTF-8的編碼,而Chrome預設的是中文簡體)。如下圖:
好了,真正的資訊源已經被挖出,剩下的就是用Python處理這些頁面上的字串,然後剪下、拼接,重新組成新的《專案備案書》了。
再然後使用for、while等迴圈,批量獲取這些《備案書》。
正如“不論是靜態網頁,動態網頁,模擬登陸等,都要先分析、搞懂邏輯,再去寫程式碼”所說,程式語言只是一個工具,重要的是解決問題的思路。有了思路,再尋找趁手的工具去解決,就OK了。
轉自http://www.cnblogs.com/codex/p/4179225.html
相關推薦
python結合chrome抓取動態網頁思路
用Python實現常規的靜態網頁抓取時,往往是用urllib2來獲取整個HTML頁面,然後從HTML檔案中逐字查詢對應的關鍵字。如下所示: #encoding=utf-8 import urllib2 url="http://mm.taobao.com/json/req
Python網路爬蟲抓取動態網頁並將資料存入資料庫MYSQL
簡述 以下的程式碼是使用python實現的網路爬蟲,抓取動態網頁http://hb.qq.com/baoliao/。此網頁中的最新、精華下面的內容是由JavaScript動態生成的。審查網頁元素與網頁原始碼是不同。 本人對於Python學習建立了一個小小的學習圈子,為各位提供了
在使用python的selenium庫 抓取動態網頁時,瀏覽器內容出現空白的解決方式
轉載請標明出處,謝謝~。 我使用的版本: 1、python 3.7 (IDE 用的 pycharm) 2、selenium(通過pip install 安裝的最新版本:3.14 時間:2018.9.6 ) 3、 geckodriver.exe 21.0 4、fi
Python之抓取動態網頁
python之抓取花瓣網圖片 實現方法: 1,建立一個資料夾。 2,模擬請求網路服務。 3,匹配抓取的圖片。 4,儲存。 #_*_coding:utf8_*_ import re import os import urllib,urllib2 i
如何用Python,C#等語言去實現抓取靜態網頁+抓取動態網頁+模擬登陸網站
轉自: 背景 在網路,網頁,網站處理方面,很多人都遇到過,想要用某種語言(Python,C#等),去實現一些需求,常見的有這幾大類: 想要從某靜態網頁中,提取某些內容 想要抓取某些動態網頁中的某些內容 想要模擬登陸某個網站 對於這類需求,其基本的背後邏輯,都是相
Scrapy抓取動態網頁
都是 搜索 華盛頓 etime 觀察 review llb 得到 我們 動態網頁指幾種可能: 1)需要用戶交互,如常見的登錄操作; 2)網頁通過JS/ AJAX動態生成,如一個html裏有<div id="test"></div>,通過JS生成&l
java webmagic 抓取靜態網頁資源,抓取動態網頁資源
webmagicJava爬蟲框架 fastjson 阿里巴巴提供的 json 轉為物件的快捷包,裡面有下載jar包的地址 抓取靜態網頁資源 。例項:抓取李開復部落格:標題,內容,釋出日期。 public class LiKaiFuBlogReading implements Pag
Python使用selenium爬取動態網頁時遇到的問題
我們在做京東手機資訊的爬取時,遇到的一些問題,現在就來跟大家分享一下。 1.首先,京東的網頁是動態的,當我們搜尋一個商品時,需要把頁面往下翻,下面的內容才會出來,這也是我們選selenium方法的原因 解決方法:讓瀏覽器模擬下拉幾次頁面即可 from selen
Selenium及Headless Chrome抓取動態HTML頁面
一般的的靜態HTML頁面可以使用requests等庫直接抓取,但還有一部分比較複雜的動態頁面,這些頁面的DOM是動態生成的,有些還需要使用者與其點選互動,這些頁面只能使用真實的瀏覽器引擎動態解析,Selenium和Chrome Headless可以很好的達到這種目的。 Headless Chrome He
【python爬蟲】抓取連結網頁內的文字 (第一步 定位超連結文字)
第一步:匯入模組>>> import re >>> from bs4 import BeautifulSoup >>> import urllib.request ---------------------------
python 爬取動態網頁(百度圖片)
# python 3.6.3 import re import os from urllib import parse from urllib import request ################################################### # 搜尋關鍵字
[Python爬蟲]Scrapy配合Selenium和PhantomJS爬取動態網頁
Python世界中Scrapy一直是爬蟲的一個較為成熟的解決方案,目前javascript在網頁中應用越來越廣泛,越來越多的網站選擇使用javascript動態的生成網頁的內容,使得很多純html的爬蟲解決方案失效。針對這種動態網站的爬取,目前也有很多解決方案。
python抓取動態資料 A股上市公司基本資訊
1.背景 之前寫的抓取A股所有上市公司資訊的小程式在上交所網站改版後,需要同步修改 pyton2.7.9 2.分析過程 以抓取宇通客車【600066】資訊為例 紅框中的內容是需要抓取的資訊,檢視網頁原始碼 可以看到公司資訊並沒有直接寫到html中,使用chrome “
Python爬蟲抓取動態資料
一個月前實習導師佈置任務說通過網路爬蟲獲取深圳市氣象局釋出的降雨資料,網頁如下: 心想,爬蟲不太難的,當年跟zjb爬煎蛋網無(mei)聊(zi)圖的時候,多麼清高。由於接受任務後的一個月考試加作業一大堆,導師也不催,自己也不急。 但是,導師等我一個月都得讓我來寫意味著這
Python爬蟲爬取動態頁面思路+例項(一)
簡介 有時候,我們天真無邪的使用urllib庫或Scrapy下載HTML網頁時會發現,我們要提取的網頁元素並不在我們下載到的HTML之中,儘管它們在瀏覽器裡看起來唾手可得。 這說明我們想要的元素是在我們的某些操作下通過js事件動態生成的。舉個例子,我們在刷Q
(python解析js)selenium結合phantomjs抓取js生成的頁面
,有些網頁是在載入時動態建立HTML內容,只要在js程式碼完全執行完後才會顯示最終結果。如果用傳統的方法抓取頁面,就只能獲得js程式碼執行之前頁面上的內容。 要解決這個問題有兩種方法: 1.直接從js程式碼中抓取資料(執行js程式碼,解析js變數)。
Python如何爬取動態網頁資料
1.引言 說到爬網頁,我們一般的操作是先檢視原始碼或者審查元素,找到資訊所在節點,然後用 beautifulsoup/xpth/re 來獲取資料,這是我們對付靜態網頁的常用手段。 但大家也知
(python解析js)scrapy結合ghost抓取js生成的頁面,以及js變數的解析
現在頁面用ajax的越來越多, 好多程式碼是通過js執行結果顯示在頁面的(比如:http://news.sohu.com/scroll/,搜狐滾動新聞的列表是在頁面請求時由後臺一次性將資料渲染到前臺js變數newsJason和arrNews裡面的,然後再由js生
Python抓取HTML網頁並以PDF儲存
一、前言 今天介紹將HTML網頁抓取下來,然後以PDF儲存,廢話不多說直接進入教程。 二、準備工作 from PyPDF2 import PdfFileMerger merger = PdfFileMerger() input1 = open("hql_1_
python爬蟲-->抓取動態內容
上幾篇博文講的都是關於抓取靜態網頁的相關內容,但是現在市面上絕大多數主流網站都在其重要功能中依賴JavaScript,使用JavaScript時,不再是載入後立即下載所有頁面內容,這樣就會造成許多網頁在瀏覽器中展示的內容不會出現在html原始碼中。這時候再用前幾