摘要:開源即時網絡爬蟲項目將與基于的異步網絡框架集成,所以本例將使用采集淘寶這種含有大量代碼的網頁數據,但是要注意本例一個嚴重缺陷用加載網頁的過程發生在中,破壞了的架構原則。
1,引言
本文講解怎樣用Python驅動Firefox瀏覽器寫一個簡易的網頁數據采集器。開源Python即時網絡爬蟲項目將與Scrapy(基于twisted的異步網絡框架)集成,所以本例將使用Scrapy采集淘寶這種含有大量ajax代碼的網頁數據,但是要注意本例一個嚴重缺陷:用Selenium加載網頁的過程發生在Spider中,破壞了Scrapy的架構原則。所以,本例只是為了測試Firefox驅動和ajax網頁數據采集這兩個技術點,用于正式運行環境中必須予以修改,后續的文章將專門講解修正后的實現。
請注意,本例用到的xslt文件是通過MS謀數臺保存提取器后,通過API接口獲得,一方面讓python代碼變得簡潔,另一方面,節省調試采集規則的時間。詳細操作請查看Python即時網絡爬蟲:API說明
2,具體實現
2.1,環境準備
需要執行以下步驟,準備Python開發和運行環境:
安裝Python--官網下載安裝并部署好環境變量 (本文使用Python版本為3.5.1)
安裝lxml-- 官網庫下載對應版本的.whl文件,然后命令行界面執行 "pip install .whl文件路徑"
安裝Scrapy--命令行界面執行 "pip install Scrapy",詳細請參考Scrapy:Python3下的第一次運行測試
安裝selenium--命令行界面執行 "pip install selenium"
安裝Firefox--官網下載安裝
上述步驟展示了兩種安裝:1,安裝下載到本地的wheel包;2,用Python安裝管理器執行遠程下載和安裝。
2.2,開發和測試過程
以下代碼默認都是在命令行界面執行
1),創建scrapy爬蟲項目simpleSpider
E:python-3.5.1>scrapy startproject simpleSpider
2),修改settings.py配置
有些網站會在根目錄下放置一個名字為robots.txt的文件,里面聲明了此網站希望爬蟲遵守的規范,Scrapy默認遵守這個文件制定的規范,即ROBOTSTXT_OBEY默認值為True。在這里需要修改ROBOTSTXT_OBEY的值,找到E:python-3.5.1simpleSpidersimpleSpider下文件settings.py,更改ROBOTSTXT_OBEY的值為False。
3),導入API模塊
在項目目錄E:python-3.5.1simpleSpider下創建文件gooseeker.py(也可以在開源Python即時網絡爬蟲GitHub源 的core文件夾中直接下載),代碼如下:
#!/usr/bin/python # -*- coding: utf-8 -*- # 模塊名: gooseeker # 類名: GsExtractor # Version: 2.0 # 說明: html內容提取器 # 功能: 使用xslt作為模板,快速提取HTML DOM中的內容。 # released by 集搜客(http://www.gooseeker.com) on May 18, 2016 # github: https://github.com/FullerHua/jisou/core/gooseeker.py from urllib import request from urllib.parse import quote from lxml import etree import time class GsExtractor(object): def _init_(self): self.xslt = "" # 從文件讀取xslt def setXsltFromFile(self , xsltFilePath): file = open(xsltFilePath , "r" , encoding="UTF-8") try: self.xslt = file.read() finally: file.close() # 從字符串獲得xslt def setXsltFromMem(self , xsltStr): self.xslt = xsltStr # 通過GooSeeker API接口獲得xslt def setXsltFromAPI(self , APIKey , theme, middle=None, bname=None): apiurl = "http://www.gooseeker.com/api/getextractor?key="+ APIKey +"&theme="+quote(theme) if (middle): apiurl = apiurl + "&middle="+quote(middle) if (bname): apiurl = apiurl + "&bname="+quote(bname) apiconn = request.urlopen(apiurl) self.xslt = apiconn.read() # 返回當前xslt def getXslt(self): return self.xslt # 提取方法,入參是一個HTML DOM對象,返回是提取結果 def extract(self , html): xslt_root = etree.XML(self.xslt) transform = etree.XSLT(xslt_root) result_tree = transform(html) return result_tree
4),創建SimpleSpider爬蟲類
在項目目錄E:python-3.5.1simpleSpidersimpleSpiderspiders下創建文件simplespider.py,代碼如下:
# -*- coding: utf-8 -*- import time import scrapy from lxml import etree from selenium import webdriver from gooseeker import GsExtractor class SimpleSpider(scrapy.Spider): name = "simplespider" allowed_domains = ["taobao.com"] start_urls = [ "https://item.taobao.com/item.htm?spm=a230r.1.14.197.e2vSMY&id=44543058134&ns=1&abbucket=10" ] def __init__(self): # use any browser you wish self.browser = webdriver.Firefox() def getTime(self): # 獲得當前時間戳 current_time = str(time.time()) m = current_time.find(".") current_time = current_time[0:m] return current_time def parse(self, response): print("start...") #start browser self.browser.get(response.url) #loading time interval time.sleep(3) #get xslt extra = GsExtractor() extra.setXsltFromAPI("API KEY" , "淘寶天貓_商品詳情30474") # get doc html = self.browser.execute_script("return document.documentElement.outerHTML"); doc = etree.HTML(html) result = extra.extract(doc) # out file file_name = "F:/temp/淘寶天貓_商品詳情30474_" + self.getTime() + ".xml" open(file_name,"wb").write(result) self.browser.close() print("end")
5),啟動爬蟲
在E:python-3.5.1simpleSpider項目目錄下執行命令
E:python-3.5.1simpleSpider>scrapy crawl simplespider
6),輸出文件
采集到的網頁數據結果文件是:淘寶天貓_商品詳情30474_1466064544.xml
3,展望
調用Firefox,IE等全特性瀏覽器顯得有點太重量級,很多場合可以考慮輕量級的瀏覽器內核,比如,casperjs和phantomjs等。同時運行在沒有界面的瀏覽器(headless browser,無頭瀏覽器)模式下,也許可以對網頁數據采集性能有所提升。
然后,最重要的一點是要寫一個 Scrapy 的下載器,專門驅動這些瀏覽器采集網頁數據,也就是把這個功能從Spider中遷移出來,這樣才符合Scrapy的整體框架原則,實現事件驅動的工作模式。
4,相關文檔
1, Python即時網絡爬蟲:API說明
2, API例子:用Java/JavaScript下載內容提取器
5,集搜客GooSeeker開源代碼下載源
1, 開源Python即時網絡爬蟲GitHub源
6,文檔修改歷史
1,2016-06-28:V1.0
2,2016-06-28:V1.1,在第一段明顯位置注明本案例的缺陷
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38024.html
摘要:也就是用可視化的集搜客爬蟲軟件針對亞馬遜圖書商品頁做一個采集規則,并結合規則提取器抓取網頁內容。安裝集搜客爬蟲軟件前期準備進入集搜客官網產品頁面,下載對應版本。 showImg(https://segmentfault.com/img/bVEFvL?w=300&h=300); 1. 引言 前面文章的測試案例都用到了集搜客Gooseeker提供的規則提取器,在網頁抓取工作中,調試正則表達...
摘要:爬取網易云音樂的歌單。打開歌單的,然后用提取播放數。值得強調的是,不要將動態網頁和頁面內容是否有動感混為一談。它會把網站加載到內存并執行頁面上的,但是它不會向用戶展示網頁的圖形界面。 爬取網易云音樂的歌單。 打開歌單的url: http://music.163.com/#/discov...,然后用lxml.html提取播放數3715。結果表明,我們什么也沒提取到。難道我們打開了一個假...
摘要:上一篇文章網絡爬蟲實戰請求庫安裝下一篇文章網絡爬蟲實戰解析庫的安裝的安裝在上一節我們了解了的配置方法,配置完成之后我們便可以用來驅動瀏覽器來做相應網頁的抓取。上一篇文章網絡爬蟲實戰請求庫安裝下一篇文章網絡爬蟲實戰解析庫的安裝 上一篇文章:Python3網絡爬蟲實戰---1、請求庫安裝:Requests、Selenium、ChromeDriver下一篇文章:Python3網絡爬蟲實戰--...
摘要:自動化測試工具可能是網頁應用中最流行的開源自動化測試框架。證書商業是一個開源的自動化測試框架,它實現了關鍵字測試驅動來實現測試驅動開發。 showImg(https://segmentfault.com/img/bVYz7D?w=1200&h=627); 簡評:軟件開發實踐一直以來都在變化,工具和技術也是如此。這些改變都是為了提高生產率,質量,讓客戶滿意,縮短交付時間,以及交付成功的產...
摘要:完整代碼火狐瀏覽器驅動下載鏈接提取碼雙十一剛過,想著某寶的信息看起來有些少很難做出購買決定。完整代碼&火狐瀏覽器驅動下載鏈接:https://pan.baidu.com/s/1pc8HnHNY8BvZLvNOdHwHBw 提取碼:4c08雙十一剛過,想著某寶的信息看起來有些少很難做出購買決定。于是就有了下面的設計:?既然有了想法那就趕緊說干就干趁著雙十二還沒到一、準備工作:安裝 :selen...
閱讀 1759·2023-04-26 00:20
閱讀 1803·2021-11-08 13:21
閱讀 1930·2021-09-10 10:51
閱讀 1557·2021-09-10 10:50
閱讀 3248·2019-08-30 15:54
閱讀 2130·2019-08-30 14:22
閱讀 1428·2019-08-29 16:10
閱讀 3089·2019-08-26 11:50