Python爬蟲使用Selenium+PhantomJS抓取Ajax和動態HTML內容
在Python網路爬蟲內容提取器一文我們詳細講解了核心部件:可插拔的內容提取器類gsExtractor。本文記錄了確定gsExtractor的技術路線過程中所做的程式設計實驗。這是第二部分,第一部分實驗了用xslt方式一次性提取靜態網頁內容並轉換成xml格式。留下了一個問題:javascript管理的動態內容怎樣提取?那麼本文就回答這個問題。
2,提取動態內容的技術部件
在上一篇python使用xslt提取網頁資料中,要提取的內容是直接從網頁的source code裡拿到的。但是一些Ajax動態內容是在source code找不到的,就要找合適的程式庫把非同步或動態載入的內容載入上來,交給本專案的提取器進行提取。
python可以使用selenium執行javascript,selenium可以讓瀏覽器自動載入頁面,獲取需要的資料。selenium自己不帶瀏覽器,可以使用第三方瀏覽器如Firefox,Chrome等,也可以使用headless瀏覽器如PhantomJS在後臺執行。
3,原始碼和實驗過程
假如我們要抓取京東手機頁面的手機名稱和價格(價格在網頁原始碼是找不到的),如下圖:
第一步:利用集搜客謀數臺的直觀標註功能,可以極快速度自動生成一個除錯好的抓取規則,其實是一個標準的xslt程式,如下圖,把生成的xslt程式拷貝到下面的程式中即可。注意:本文只是記錄實驗過程,實際系統中,將採用多種方式把xslt程式注入到內容提取器重。
第二步:執行如下程式碼(在windows10, python3.2下測試通過,原始碼下載地址請見文章末尾GitHub),請注意:xslt是一個比較長的字串,如果刪除這個字串,程式碼沒有幾行,足以見得Python之強大
#/usr/bin/python from urllib import request from lxml import etree from selenium import webdriver import time # 京東手機商品頁面 url = "http://item.jd.com/1312640.html" # 下面的xslt是通過集搜客的謀數臺圖形介面自動生成的 xslt_root = etree.XML("""\ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:template match="/"> <商品> <xsl:apply-templates select="//*[@id='itemInfo' and count(.//*[@id='summary-price']/div[position()=2]/strong/text())>0 and count(.//*[@id='name']/h1/text())>0]" mode="商品"/> </商品> </xsl:template> <xsl:template match="//*[@id='itemInfo' and count(.//*[@id='summary-price']/div[position()=2]/strong/text())>0 and count(.//*[@id='name']/h1/text())>0]" mode="商品"> <item> <價格> <xsl:value-of select="*//*[@id='summary-price']/div[position()=2]/strong/text()"/> <xsl:value-of select="*[@id='summary-price']/div[position()=2]/strong/text()"/> <xsl:if test="@id='summary-price'"> <xsl:value-of select="div[position()=2]/strong/text()"/> </xsl:if> </價格> <名稱> <xsl:value-of select="*//*[@id='name']/h1/text()"/> <xsl:value-of select="*[@id='name']/h1/text()"/> <xsl:if test="@id='name'"> <xsl:value-of select="h1/text()"/> </xsl:if> </名稱> </item> </xsl:template> </xsl:stylesheet>""") # 使用webdriver.PhantomJS browser = webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe') browser.get(url) time.sleep(3) transform = etree.XSLT(xslt_root) # 執行js得到整個dom html = browser.execute_script("return document.documentElement.outerHTML") doc = etree.HTML(html) # 用xslt從dom中提取需要的欄位 result_tree = transform(doc) print(result_tree)
第三步:下圖可以看到,網頁中的手機名稱和價格被正確抓取下來了
4,接下來閱讀
至此,我們通過兩篇文章演示怎樣抓取靜態和動態網頁內容,都採用了xslt一次性將需要的內容從網頁上提取出來,其實xslt是一個比較複雜的程式語言,如果手工編寫xslt,那麼還不如寫成離散的xpath。如果這個xslt不是手工寫出來的,而是程式自動生成的,這就有意義了,程式設計師再也不要花時間編寫和調測抓取規則了,這是很費時費力的工作。下一篇《1分鐘快速生成用於網頁內容提取的xslt》將講述怎樣生成xslt。
5,集搜客GooSeeker開原始碼下載源
6,文件修改歷史
2016-05-26:V2.0,增補文字說明
2016-05-29:V2.1,增加第五章:原始碼下載源,並更換github源的網址
相關推薦
Python爬蟲使用Selenium+PhantomJS抓取Ajax和動態HTML內容
1,引言在Python網路爬蟲內容提取器一文我們詳細講解了核心部件:可插拔的內容提取器類gsExtractor。本文記錄了確定gsExtractor的技術路線過程中所做的程式設計實驗。這是第二部分,第一部分實驗了用xslt方式一次性提取靜態網頁內容並轉換成xml格式。留下了
Java爬蟲——phantomjs抓取ajax動態載入網頁
(說好的第二期終於來了 >_<) 1、phantomjs介紹 phantomjs實現了一個無介面的webkit瀏覽器。雖然沒有介面,但dom渲染、js執行、網路訪問、canvas/svg繪製等功能都很完備,在頁面抓取、頁面輸出、自動化測試等方面有廣泛的應用。
python爬蟲 selenium+phantomjs動態解析網頁,加載頁面成功,返回空數據
img 使用 一個 做的 ima 導數 技術分享 信息 之前 廢話不多說,直接說重點: 剛開始做的時候,代理IP,頭部信息池,都已經做好了,使用selenium+phantomjs獲取js動態加載後的源碼 起初挺好的,能出來動態加載後的源碼,但是運行了幾次之後,電腦有點卡頓
C#使用Selenium+PhantomJS抓取數據
16px proxy pan 使用 AD driver def ima avi 本文主要介紹了C#使用Selenium+PhantomJS抓取數據的方法步驟,具有很好的參考價值,下面跟著小編一起來看下吧 手頭項目需要抓取一個用js渲染出來的網站中的數據。使用常用的htt
C#利用phantomJS抓取AjAX動態頁面
tin 文件 stringbu == 導致 style 間隔 edi zip壓縮 在C#中,一般常用的請求方式,就是利用HttpWebRequest創建請求,返回報文。但是有時候遇到到動態加載的頁面,卻只能抓取部分內容,無法抓取到動態加載的內容。 如果遇到這種的話,推薦
Python爬蟲實戰:抓取並儲存百度雲資源(附程式碼)
尋找並分析百度雲的轉存api 首先你得有一個百度雲盤的賬號,然後登入,用瀏覽器(這裡用火狐瀏覽器做示範)開啟一個分享連結。F12開啟控制檯進行抓包。手動進行轉存操作:全選檔案->儲存到網盤->選擇路徑->確定。點選【確定】前建議先清空一下抓包記錄,這樣可以精確定位到轉存的api,這就是
Python爬蟲案例:抓取豆瓣程式設計類高評分書籍
對於很多正在學習計算機的朋友來說,選擇合適的學習材料是非常重要的。 本文將通過 Python 來爬取豆瓣程式設計類評分大於 9.0 的書籍。 此案例很適合入門爬蟲的朋友學習,總共也就 3 個函式。 下圖是最終的結果: 下面進入正題: 一、採集源分析: 首先我們
[Python爬蟲] 7-Charles抓取微信小程式
最近在嘗試抓取微信的小程式,用到了Charles,微信小程式的話需要使用HTTPS抓包,網上有些教程內容有步驟的缺失,所以重新整理一份傻瓜式的教程,環境WIN10+IOS,內容基於Roy_Liang前輩
在使用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爬蟲] Selenium常見元素定位方法和操作的學習介紹
這篇文章主要Selenium+Python自動測試或爬蟲中的常見定位方法、滑鼠操作、鍵盤操作介紹, 一. 定位元素方法 find_element_by_idfind_element_by_namefind_element_by_xpathfind_ele
Project 3 :Python爬蟲原始碼實現抓取1000條西刺免費代理IP-HTTPS並儲存讀取
基於python3.6—pycharm編寫的,都已經除錯過了,歡迎大家提出交流意見。關於一些基礎的資料網頁分析(比如為什麼是這個url)沒有過多贅述,看不懂的自行百度。原始碼可以直接拷貝執行。轉載請註明來源。import requests import re ''' Pyt
Python爬蟲實戰之抓取淘寶MM照片(一)
背景 Python爬蟲系列教程的一次實戰,然而淘寶進行過頁面改版,現在已經沒有淘寶MM這個版面,取而代之的是淘女郎。改版後,頁面是使用JS渲染的,並不能直接通過url來切換頁碼。該系列教程後續講到
Python中使用PhantomJS抓取Javascript網頁資料
有些網頁不是靜態載入的,而是通過javascirpt函式動態載入網頁,比如下面這個網頁,表格中的看漲合約和看跌合約的資料都是通過javascirpt函式從後臺載入。僅僅使用beautifulsoup並不能抓到這個表格中的資料。 查詢資料,發現可以使用P
【爬蟲】Scrapy爬蟲框架教程-- 抓取AJAX非同步載入網頁
前一段時間工作太忙一直沒有時間繼續更新這個教程,最近離職了趁著這段時間充裕趕緊多寫點東西。之前我們已經簡單瞭解了對普通網頁的抓取,今天我就給大家講一講怎麼去抓取採用Ajax非同步加的網站。 工具和環境 語言:python 2.7 IDE: Pycharm 瀏覽器:Ch
Python爬蟲一步步抓取房產資訊
嗯,這一篇文章更多是想分享一下我的網頁分析方法。玩爬蟲也快有一年了,基本程式碼熟悉之後,我感覺寫一個爬蟲最有意思的莫過於研究其網頁背後的載入過程了,也就是分析過程,對效能沒有特殊要求的情況下,程式設計一般是小事。 以深圳地區的X房網為例吧。XX房網的主頁非常簡潔,輸入相
Python爬蟲之一:抓取貓眼電影TOP100
執行平臺: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome瀏覽器1. 抓取單頁內容瀏覽器開啟貓眼電影首頁,點選“榜單”,然後再點選”TOP100榜”,就能看到想要的了。接下來通過程式碼來獲取網頁的HTML
Python爬蟲 selenium+PhantomJS 介紹、安裝、使用
之前用Java做過爬蟲,也用到過selenium和PhantomJS。最近痴迷於python爬蟲,將selenium+PhantomJS在python中的應用詳細總結一下。 一、Selenium介紹 Selenium 是什麼?一句話,自動化測試工具。它支援各
[python爬蟲] Selenium定向爬取海量精美圖片及搜尋引擎雜談
我自認為這是自己寫過部落格中一篇比較優秀的文章,同時也是在深夜凌晨2點滿懷著激情和愉悅之心完成的。首先通過這篇文章,你能學到以下幾點: 1.可以瞭解Python簡單爬取圖片的一些思路和方法 2.學習Selenium自動、測試分析
簡單Python爬蟲例項:抓取豆瓣熱映電影資訊
最近在學習Python爬蟲基礎,僅用部落格記錄下學習的過程。學習過程基於麥子學院的課程,感謝麥子學院,感謝Joey老師。那麼我們來看一下,怎麼抓取資料。Chrome瀏覽器有一個開發者工具,很適合檢視網頁原始碼,所以我們用Chrome。開啟之後是這樣:然後我們在網頁位址列輸入豆
Python爬蟲,用於抓取豆瓣電影Top前100的電影的名稱
初步接觸python爬蟲(其實python也是才起步),發現一段程式碼研究了一下,覺得還比較有用處,Mark下。 上程式碼: #!/usr/bin/python #coding=utf-8 #Author: Andrew_liu #mender:cy "