成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

API例子:用Python驅(qū)動(dòng)Firefox采集網(wǎng)頁(yè)數(shù)據(jù)

Harriet666 / 3112人閱讀

摘要:開(kāi)源即時(shí)網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目將與基于的異步網(wǎng)絡(luò)框架集成,所以本例將使用采集淘寶這種含有大量代碼的網(wǎng)頁(yè)數(shù)據(jù),但是要注意本例一個(gè)嚴(yán)重缺陷用加載網(wǎng)頁(yè)的過(guò)程發(fā)生在中,破壞了的架構(gòu)原則。

1,引言

本文講解怎樣用Python驅(qū)動(dòng)Firefox瀏覽器寫(xiě)一個(gè)簡(jiǎn)易的網(wǎng)頁(yè)數(shù)據(jù)采集器。開(kāi)源Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目將與Scrapy(基于twisted的異步網(wǎng)絡(luò)框架)集成,所以本例將使用Scrapy采集淘寶這種含有大量ajax代碼的網(wǎng)頁(yè)數(shù)據(jù),但是要注意本例一個(gè)嚴(yán)重缺陷:用Selenium加載網(wǎng)頁(yè)的過(guò)程發(fā)生在Spider中,破壞了Scrapy的架構(gòu)原則。所以,本例只是為了測(cè)試Firefox驅(qū)動(dòng)和ajax網(wǎng)頁(yè)數(shù)據(jù)采集這兩個(gè)技術(shù)點(diǎn),用于正式運(yùn)行環(huán)境中必須予以修改,后續(xù)的文章將專(zhuān)門(mén)講解修正后的實(shí)現(xiàn)。

請(qǐng)注意,本例用到的xslt文件是通過(guò)MS謀數(shù)臺(tái)保存提取器后,通過(guò)API接口獲得,一方面讓python代碼變得簡(jiǎn)潔,另一方面,節(jié)省調(diào)試采集規(guī)則的時(shí)間。詳細(xì)操作請(qǐng)查看Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng):API說(shuō)明

2,具體實(shí)現(xiàn)

2.1,環(huán)境準(zhǔn)備

需要執(zhí)行以下步驟,準(zhǔn)備Python開(kāi)發(fā)和運(yùn)行環(huán)境:

安裝Python--官網(wǎng)下載安裝并部署好環(huán)境變量 (本文使用Python版本為3.5.1)

安裝lxml-- 官網(wǎng)庫(kù)下載對(duì)應(yīng)版本的.whl文件,然后命令行界面執(zhí)行 "pip install .whl文件路徑"

安裝Scrapy--命令行界面執(zhí)行 "pip install Scrapy",詳細(xì)請(qǐng)參考Scrapy:Python3下的第一次運(yùn)行測(cè)試

安裝selenium--命令行界面執(zhí)行 "pip install selenium"

安裝Firefox--官網(wǎng)下載安裝

上述步驟展示了兩種安裝:1,安裝下載到本地的wheel包;2,用Python安裝管理器執(zhí)行遠(yuǎn)程下載和安裝。

2.2,開(kāi)發(fā)和測(cè)試過(guò)程

以下代碼默認(rèn)都是在命令行界面執(zhí)行

1),創(chuàng)建scrapy爬蟲(chóng)項(xiàng)目simpleSpider

E:python-3.5.1>scrapy startproject simpleSpider

2),修改settings.py配置

有些網(wǎng)站會(huì)在根目錄下放置一個(gè)名字為robots.txt的文件,里面聲明了此網(wǎng)站希望爬蟲(chóng)遵守的規(guī)范,Scrapy默認(rèn)遵守這個(gè)文件制定的規(guī)范,即ROBOTSTXT_OBEY默認(rèn)值為T(mén)rue。在這里需要修改ROBOTSTXT_OBEY的值,找到E:python-3.5.1simpleSpidersimpleSpider下文件settings.py,更改ROBOTSTXT_OBEY的值為False。

3),導(dǎo)入API模塊

在項(xiàng)目目錄E:python-3.5.1simpleSpider下創(chuàng)建文件gooseeker.py(也可以在開(kāi)源Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng)GitHub源 的core文件夾中直接下載),代碼如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# 模塊名: gooseeker
# 類(lèi)名: GsExtractor
# Version: 2.0
# 說(shuō)明: html內(nèi)容提取器
# 功能: 使用xslt作為模板,快速提取HTML DOM中的內(nèi)容。
# 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
    # 通過(guò)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()
    # 返回當(dāng)前xslt
    def getXslt(self):
        return self.xslt
    # 提取方法,入?yún)⑹且粋€(gè)HTML DOM對(duì)象,返回是提取結(jié)果
    def extract(self , html):
        xslt_root = etree.XML(self.xslt)
        transform = etree.XSLT(xslt_root)
        result_tree = transform(html)
        return result_tree

4),創(chuàng)建SimpleSpider爬蟲(chóng)類(lèi)

在項(xiàng)目目錄E:python-3.5.1simpleSpidersimpleSpiderspiders下創(chuàng)建文件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):
        # 獲得當(dāng)前時(shí)間戳
        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),啟動(dòng)爬蟲(chóng)

在E:python-3.5.1simpleSpider項(xiàng)目目錄下執(zhí)行命令

E:python-3.5.1simpleSpider>scrapy crawl simplespider

6),輸出文件

采集到的網(wǎng)頁(yè)數(shù)據(jù)結(jié)果文件是:淘寶天貓_商品詳情30474_1466064544.xml

3,展望

調(diào)用Firefox,IE等全特性瀏覽器顯得有點(diǎn)太重量級(jí),很多場(chǎng)合可以考慮輕量級(jí)的瀏覽器內(nèi)核,比如,casperjs和phantomjs等。同時(shí)運(yùn)行在沒(méi)有界面的瀏覽器(headless browser,無(wú)頭瀏覽器)模式下,也許可以對(duì)網(wǎng)頁(yè)數(shù)據(jù)采集性能有所提升。

然后,最重要的一點(diǎn)是要寫(xiě)一個(gè) Scrapy 的下載器,專(zhuān)門(mén)驅(qū)動(dòng)這些瀏覽器采集網(wǎng)頁(yè)數(shù)據(jù),也就是把這個(gè)功能從Spider中遷移出來(lái),這樣才符合Scrapy的整體框架原則,實(shí)現(xiàn)事件驅(qū)動(dòng)的工作模式。

4,相關(guān)文檔

1, Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng):API說(shuō)明
2, API例子:用Java/JavaScript下載內(nèi)容提取器

5,集搜客GooSeeker開(kāi)源代碼下載源

1, 開(kāi)源Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng)GitHub源

6,文檔修改歷史

1,2016-06-28:V1.0
2,2016-06-28:V1.1,在第一段明顯位置注明本案例的缺陷

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38024.html

相關(guān)文章

  • 快速制作規(guī)則及獲取規(guī)則提取器API

    摘要:也就是用可視化的集搜客爬蟲(chóng)軟件針對(duì)亞馬遜圖書(shū)商品頁(yè)做一個(gè)采集規(guī)則,并結(jié)合規(guī)則提取器抓取網(wǎng)頁(yè)內(nèi)容。安裝集搜客爬蟲(chóng)軟件前期準(zhǔn)備進(jìn)入集搜客官網(wǎng)產(chǎn)品頁(yè)面,下載對(duì)應(yīng)版本。 showImg(https://segmentfault.com/img/bVEFvL?w=300&h=300); 1. 引言 前面文章的測(cè)試案例都用到了集搜客Gooseeker提供的規(guī)則提取器,在網(wǎng)頁(yè)抓取工作中,調(diào)試正則表達(dá)...

    itvincent 評(píng)論0 收藏0
  • 爬蟲(chóng)示例-網(wǎng)易云歌單

    摘要:爬取網(wǎng)易云音樂(lè)的歌單。打開(kāi)歌單的,然后用提取播放數(shù)。值得強(qiáng)調(diào)的是,不要將動(dòng)態(tài)網(wǎng)頁(yè)和頁(yè)面內(nèi)容是否有動(dòng)感混為一談。它會(huì)把網(wǎng)站加載到內(nèi)存并執(zhí)行頁(yè)面上的,但是它不會(huì)向用戶展示網(wǎng)頁(yè)的圖形界面。 爬取網(wǎng)易云音樂(lè)的歌單。 打開(kāi)歌單的url: http://music.163.com/#/discov...,然后用lxml.html提取播放數(shù)3715。結(jié)果表明,我們什么也沒(méi)提取到。難道我們打開(kāi)了一個(gè)假...

    davidac 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---2、請(qǐng)求庫(kù)安裝:GeckoDriver、PhantomJS、Aioh

    摘要:上一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)請(qǐng)求庫(kù)安裝下一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)解析庫(kù)的安裝的安裝在上一節(jié)我們了解了的配置方法,配置完成之后我們便可以用來(lái)驅(qū)動(dòng)瀏覽器來(lái)做相應(yīng)網(wǎng)頁(yè)的抓取。上一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)請(qǐng)求庫(kù)安裝下一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)解析庫(kù)的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---1、請(qǐng)求庫(kù)安裝:Requests、Selenium、ChromeDriver下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)--...

    Cristalven 評(píng)論0 收藏0
  • 2018 最好的自動(dòng)化測(cè)試工具(Top 10 回顧)

    摘要:自動(dòng)化測(cè)試工具可能是網(wǎng)頁(yè)應(yīng)用中最流行的開(kāi)源自動(dòng)化測(cè)試框架。證書(shū)商業(yè)是一個(gè)開(kāi)源的自動(dòng)化測(cè)試框架,它實(shí)現(xiàn)了關(guān)鍵字測(cè)試驅(qū)動(dòng)來(lái)實(shí)現(xiàn)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。 showImg(https://segmentfault.com/img/bVYz7D?w=1200&h=627); 簡(jiǎn)評(píng):軟件開(kāi)發(fā)實(shí)踐一直以來(lái)都在變化,工具和技術(shù)也是如此。這些改變都是為了提高生產(chǎn)率,質(zhì)量,讓客戶滿意,縮短交付時(shí)間,以及交付成功的產(chǎn)...

    waltr 評(píng)論0 收藏0
  • selenium實(shí)戰(zhàn):窗口化爬取*寶數(shù)據(jù)(附源碼鏈接)

    摘要:完整代碼火狐瀏覽器驅(qū)動(dòng)下載鏈接提取碼雙十一剛過(guò),想著某寶的信息看起來(lái)有些少很難做出購(gòu)買(mǎi)決定。完整代碼&火狐瀏覽器驅(qū)動(dòng)下載鏈接:https://pan.baidu.com/s/1pc8HnHNY8BvZLvNOdHwHBw 提取碼:4c08雙十一剛過(guò),想著某寶的信息看起來(lái)有些少很難做出購(gòu)買(mǎi)決定。于是就有了下面的設(shè)計(jì):?既然有了想法那就趕緊說(shuō)干就干趁著雙十二還沒(méi)到一、準(zhǔn)備工作:安裝 :selen...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<