1. 程式人生 > >使用python抓取js動態載入的網頁

使用python抓取js動態載入的網頁

原文地址:http://blog.csdn.net/lambert310/article/details/49248109

我們在做網頁抓取的時候,一般來說使用urllib和urllib2就能滿足大部分需求。

但是有時候我們遇見那種使用js動態載入的網頁。就會發現urllib只能抓出一個部分內容空白的網頁。就像下面百度圖片的結果頁:


審查元素之後,。發現百度圖片中,顯示圖片的div為:pullimages


這個div裡面的內容是動態載入的。而使用urllib&urllib2是抓取不到的。

要抓取動態載入的元素,首先考慮使用selenium來呼叫瀏覽器進行抓取。

而我們執行的環境是linux,最理想的方法是在無介面情況下進行抓取。

所以使用selenium+phantomjs來進行無介面抓取

phantomjs是什麼呢?它是一個基於webkit核心的無頭瀏覽器,即沒有UI介面,即它就是一個瀏覽器

selenium和phantomjs的安裝配置可以google,這裡就略過不談了

程式碼如下:

from selenium import webdriver
driver = webdriver.PhantomJS(executable_path='/bin/phantomjs/bin/phantomjs')#如果不方便配置環境變數。就使用phantomjs的絕對路徑也可以

driver.get('http://image.baidu.com/i?ie=utf-8&word=%E5%91%A8%E6%9D%B0%E4%BC%A6')#抓取了百度圖片,query:周杰倫

driver.page_source #這就是返回的頁面內容了,與urllib2.urlopen().read()的效果是類似的,但比urllib2強在能抓取到動態渲染後的內容。

driver.quit()

到這裡。就抓取動態頁面成功了。

js動態載入,可以用Python模擬請求。

原文地址:https://www.zhihu.com/question/21332889

像這種情況一般是非同步請求json或者jsonp,直接監控network就行了:
以chrome瀏覽器為例。
1.右鍵頁面-審查元素-Network,切換到network面板,重新整理頁面。
然後瀏覽器和web後端的通訊會被記錄下來。
<img src="https://pic2.zhimg.com/fafe221837c03f3229b0ed2dad3977e9_b.jpg" data-rawwidth="1219" data-rawheight="225" class="origin_image zh-lightbox-thumb" width="1219" data-original="https://pic2.zhimg.com/fafe221837c03f3229b0ed2dad3977e9_r.jpg">

排除掉圖片,css等。
要獲取當前新聞的評論數,瀏覽器傳送給伺服器的請求裡面一定會有一個和當前新聞id有關的引數,(當然理論上也有通過referer來實現id傳遞的,但是畢竟太奇葩,不予考慮)。
所以
1. 如果method為GET,在Name裡面一定有一個特殊的字串,用來標識要請求的是哪個新聞的評論。
2. 或者method為POST,那麼在POST的引數裡面會有一個能標識當前新聞的引數:
<img src="https://pic3.zhimg.com/8f67b309d3846bd46c5ad35bec492b3e_b.jpg" data-rawwidth="913" data-rawheight="402" class="origin_image zh-lightbox-thumb" width="913" data-original="https://pic3.zhimg.com/8f67b309d3846bd46c5ad35bec492b3e_r.jpg">這是微信公眾平臺獲取聊天資訊的action,fromfakeid就是聊天對方的id。這是微信公眾平臺獲取聊天資訊的action,fromfakeid就是聊天對方的id。
如果要用POST方法獲取某個新聞的評論數,在這裡也會有一個引數用來標識出這個新聞。(比如“175827642839”)。

然後一個個排查,圖片css均不考慮,那麼很容易就能找到
comment5.news.sina.com.cn
可以精簡為comment5.news.sina.com.cn
其中的newsid引數1-1-27642839和175827642839關係很明顯了。
這是一個js,裡面有一句:"count": {"qreply": 706, "total": 823, "show": 95},你要找的就在這裡。
可以直接從字串裡面擷取到total,或者去掉js頭部的“var data =”。得到一個json字串,解析成物件也能獲取total 。
在新聞頁面的原始碼裡面找“1-1-27642839” 可以找到“newsid:'1-1-27642839',”

分析過程基本結束。
然後,你可以:
1.分析新聞頁程式碼,得到newsid
2.請求comment5.news.sina.com.cn“newsid”
3.解析獲取到的js

相關推薦

使用pythonjs動態載入網頁

原文地址:http://blog.csdn.net/lambert310/article/details/49248109 我們在做網頁抓取的時候,一般來說使用urllib和urllib2就能滿足大部分需求。 但是有時候我們遇見那種使用js動態載入的網頁。就會發現urllib只能抓出一個部分內容空白的

Java爬蟲——phantomjsajax動態載入網頁

(說好的第二期終於來了 >_<) 1、phantomjs介紹 phantomjs實現了一個無介面的webkit瀏覽器。雖然沒有介面,但dom渲染、js執行、網路訪問、canvas/svg繪製等功能都很完備,在頁面抓取、頁面輸出、自動化測試等方面有廣泛的應用。

pythonJS動態網頁完整指南(selenium+chrome headless)

11.23:更新,每次還要開啟瀏覽器多影響執行效率,看到蟲師講了chrome headless,非常好用 引用新增: from selenium.webdriver.chrome.options import Options 程式碼新增: chrome_options =

Pythonajax動態載入內容

import requests import json import csv url= "https://movie.douban.com/j/chart/top_list?" params={ "type":17, "interval_id" :"100

pythongb2312/gbk編碼網頁亂碼問題

原文連結:https://blog.csdn.net/junli_chen/article/details/50082795  做了個網路爬蟲抓取網頁,但如果網頁是gbk/gb2312編碼,則會出現亂碼問題,如下: 取得文字後,直接列印,輸出結果str如下:¹óÖÝÈËÊ¿¼ÊÔÐÅ

使用phantomjsJS動態生成的頁面

關於phantomjs phantomjs實現了一個無介面的webkit瀏覽器。雖然沒有介面,但dom渲染、js執行、網路訪問等API都很完整。可以利用phantomjs來下載js生成的頁面。 下載phantomjs(http://phantomjs.org

pythonjavascript動態生成HTML內容的實踐

本實驗在Ubuntu14.04上完成。使用的瀏覽器是火狐(Firefox 33.0),python版本是2.7.6。 大家都知道用urllib配合正則表示式抓取靜態HTML的內容很方便,但是如果網頁中有javascript動態生成的內容,urllib就無能為力了。 此時我們

【爬蟲】Scrapy爬蟲框架教程-- AJAX非同步載入網頁

前一段時間工作太忙一直沒有時間繼續更新這個教程,最近離職了趁著這段時間充裕趕緊多寫點東西。之前我們已經簡單瞭解了對普通網頁的抓取,今天我就給大家講一講怎麼去抓取採用Ajax非同步加的網站。 工具和環境 語言:python 2.7 IDE: Pycharm 瀏覽器:Ch

Ajax動態載入網頁

常見的反爬機制及處理方式 1、Headers反爬蟲 :Cookie、Referer、User-Agent   解決方案: 通過F12獲取headers,傳給requests.get()方法 2、IP限制 :網站根據IP地址訪問頻率進行反爬,短時間內進位制IP訪問   解決方案:

python爬蟲爬非同步載入網頁資訊(python網頁中無法通過網頁標籤屬性的內容)

1.問題描述 最近由於學習內容的要求,需要從網頁上抓取一些資料來做分析報告,在看了python爬蟲的一些基礎知識之後就直接上手去網站上爬資料了。作為新手踩坑是無法避免,最近就遇到了一個比較難的問題: 一般情況下,要抓去網頁上某個標籤上的內容,在通過urllib下

Python網頁動態資料——selenium webdriver的使用

文章目的 當我們使用Python爬取網頁資料時,往往用的是urllib模組,通過呼叫urllib模組的urlopen(url)方法返回網頁物件,並使用read()方法獲得url的html內容,然後使用BeautifulSoup抓取某個標籤內容,結合正則表示式過濾。但是,用u

python獲取完整網頁內容(即包括js動態載入的):selenium+phantomjs

在上一篇文章(http://blog.csdn.net/Trisyp/article/details/78732630)中我們利用模擬開啟瀏覽器的方法模擬點選網頁中的載入更多來實現動態載入網頁並獲取網

Python 網頁gb2312亂碼問題

發現 file read earch () spa .com pycharm close python 爬取學校所有人四六級成績時發現爬出網頁中文亂碼 遂google 得到一解決方案 # -*- coding:utf8 -*- import urllib2

實例:使用puppeteer headless方式JS網頁

puppeteer chromium 爬蟲 puppeteer google chrome團隊出品的puppeteer 是依賴nodejs和chromium的自動化測試庫,它的最大優點就是可以處理網頁中的動態內容,如JavaScript,能夠更好的模擬用戶。 有些網站的反爬蟲手段是將部分內容隱藏

記錄一次python網頁下載視訊

最近看了電影狂暴巨獸,連結是那種不固定的http連結,有可能隨時就打不開了,然後想下載下來留著,但是網頁不提供下載,所以就自己抓取了相關視訊,然後下載。廢話不多說,直接上乾貨。 用fiddle抓取主要的視訊。下圖就是抓取時候產生的相關資訊。 逐條進行分析,然後找到電影的包的地址。 http

python網頁資料處理後視覺化

抓取文章的連結,訪問量儲存到本地 1 #coding=utf-8 2 import requests as req 3 import re 4 import urllib 5 from bs4 import BeautifulSoup 6 import sys 7 import code

python使用selenium爬js加密的網頁

python使用selenium爬取js加密的網頁 我們經常使用Python從網站上爬取我們喜歡的圖片,比如從煎蛋網爬取妹子圖。現在雖然煎蛋網取消了“OOXX”欄目,但是至少把名字換成了隨手拍,我今天想從該網站爬取妹子圖,去發現沒有辦法 從爬取的程式碼中找到 ‘.jpg’ 關鍵詞,這就尷尬了

python動態資料 A股上市公司基本資訊

1.背景 之前寫的抓取A股所有上市公司資訊的小程式在上交所網站改版後,需要同步修改 pyton2.7.9 2.分析過程 以抓取宇通客車【600066】資訊為例 紅框中的內容是需要抓取的資訊,檢視網頁原始碼 可以看到公司資訊並沒有直接寫到html中,使用chrome “

Python 網頁學習系列之一(網頁編碼格式

第一步:你需要知道你所抓取的網頁編碼格式,方法:右鍵檢視網頁編碼,ctrl +F ,搜尋:charset會看到:<meta http-equiv="Content-Type" content="text/html; charset=gbk" />,OK確定是gb

python解析js)selenium結合phantomjsjs生成的頁面

,有些網頁是在載入時動態建立HTML內容,只要在js程式碼完全執行完後才會顯示最終結果。如果用傳統的方法抓取頁面,就只能獲得js程式碼執行之前頁面上的內容。 要解決這個問題有兩種方法: 1.直接從js程式碼中抓取資料(執行js程式碼,解析js變數)。