国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Python網(wǎng)頁(yè)信息采集:使用PhantomJS采集淘寶天貓商品內(nèi)容

z2xy / 1246人閱讀

摘要:,引言最近一直在看爬蟲(chóng)框架,并嘗試使用框架寫(xiě)一個(gè)可以實(shí)現(xiàn)網(wǎng)頁(yè)信息采集的簡(jiǎn)單的小程序。本文主要介紹如何使用結(jié)合采集天貓商品內(nèi)容,文中自定義了一個(gè),用來(lái)采集需要加載的動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容。

1,引言

最近一直在看Scrapy 爬蟲(chóng)框架,并嘗試使用Scrapy框架寫(xiě)一個(gè)可以實(shí)現(xiàn)網(wǎng)頁(yè)信息采集的簡(jiǎn)單的小程序。嘗試過(guò)程中遇到了很多小問(wèn)題,希望大家多多指教。

本文主要介紹如何使用Scrapy結(jié)合PhantomJS采集天貓商品內(nèi)容,文中自定義了一個(gè)DOWNLOADER_MIDDLEWARES,用來(lái)采集需要加載js的動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容。看了很多介紹DOWNLOADER_MIDDLEWARES資料,總結(jié)來(lái)說(shuō)就是使用簡(jiǎn)單,但會(huì)阻塞框架,所以性能方面不佳。一些資料中提到了自定義DOWNLOADER_HANDLER或使用scrapyjs可以解決阻塞框架的問(wèn)題,有興趣的小伙伴可以去研究一下,這里就不多說(shuō)了。

2,具體實(shí)現(xiàn)
2.1,環(huá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的第一次運(yùn)行測(cè)試》

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

PhantomJS -- 官網(wǎng)下載

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

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

首先找到需要采集的網(wǎng)頁(yè),這里簡(jiǎn)單找了一個(gè)天貓商品,網(wǎng)址https://world.tmall.com/item/526449276263.htm,頁(yè)面如下:

然后開(kāi)始編寫(xiě)代碼,以下代碼默認(rèn)都是在命令行界面執(zhí)行

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

E:python-3.5.1>scrapy startproject tmSpider

2),修改settings.py配置

更改ROBOTSTXT_OBEY的值為False;

關(guān)閉scrapy默認(rèn)的下載器中間件;

加入自定義DOWNLOADER_MIDDLEWARES。

配置如下:

DOWNLOADER_MIDDLEWARES = {
    "tmSpider.middlewares.middleware.CustomMiddlewares": 543,
    "scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware": None
}

3),在項(xiàng)目目錄下創(chuàng)建middlewares文件夾,然后在文件夾下創(chuàng)建middleware.py文件,代碼如下:

# -*- coding: utf-8 -*-

from scrapy.exceptions import IgnoreRequest
from scrapy.http import HtmlResponse, Response

import tmSpider.middlewares.downloader as downloader

class CustomMiddlewares(object):
    def process_request(self, request, spider):
        url = str(request.url)
        dl = downloader.CustomDownloader()
        content = dl.VisitPersonPage(url)
        return HtmlResponse(url, status = 200, body = content)
    
    def process_response(self, request, response, spider):
        if len(response.body) == 100:
            return IgnoreRequest("body length == 100")
        else:
            return response

4),使用selenium和PhantomJS寫(xiě)一個(gè)網(wǎng)頁(yè)內(nèi)容下載器,同樣在上一步創(chuàng)建好的middlewares文件夾中創(chuàng)建downloader.py文件,代碼如下:

# -*- coding: utf-8 -*-
import time
from scrapy.exceptions import IgnoreRequest
from scrapy.http import HtmlResponse, Response
from selenium import webdriver
import selenium.webdriver.support.ui as ui 

class CustomDownloader(object):
    def __init__(self):
        # use any browser you wish
        cap = webdriver.DesiredCapabilities.PHANTOMJS
        cap["phantomjs.page.settings.resourceTimeout"] = 1000
        cap["phantomjs.page.settings.loadImages"] = True
        cap["phantomjs.page.settings.disk-cache"] = True
        cap["phantomjs.page.customHeaders.Cookie"] = "SINAGLOBAL=3955422793326.2764.1451802953297; "
        self.driver = webdriver.PhantomJS(executable_path="F:/phantomjs/bin/phantomjs.exe", desired_capabilities=cap)
        wait = ui.WebDriverWait(self.driver,10)
    
    def VisitPersonPage(self, url):
        print("正在加載網(wǎng)站.....")
        self.driver.get(url)
        time.sleep(1)
        # 翻到底,詳情加載
        js="var q=document.documentElement.scrollTop=10000"
        self.driver.execute_script(js)
        time.sleep(5)
        content = self.driver.page_source.encode("gbk", "ignore")
        print("網(wǎng)頁(yè)加載完畢.....")
        return content

    def __del__(self):
        self.driver.quit()

5) 創(chuàng)建爬蟲(chóng)模塊

在項(xiàng)目目錄E:python-3.5.1tmSpider,執(zhí)行如下代碼:

E:python-3.5.1	mSpider>scrapy genspider tmall "tmall.com"

執(zhí)行后,項(xiàng)目目錄E:python-3.5.1tmSpidertmSpiderspiders下會(huì)自動(dòng)生成tmall.py程序文件。該程序中parse函數(shù)處理scrapy下載器返回的網(wǎng)頁(yè)內(nèi)容,采集網(wǎng)頁(yè)信息的方法可以是:

使用xpath或正則方式從response.body中采集所需字段,

通過(guò)gooseeker api獲取的內(nèi)容提取器實(shí)現(xiàn)一站轉(zhuǎn)換所有字段,而且不用手工編寫(xiě)轉(zhuǎn)換用的xpath(如何獲取內(nèi)容提取器請(qǐng)參考python使用xslt提取網(wǎng)頁(yè)數(shù)據(jù)),代碼如下:

# -*- coding: utf-8 -*-
import time
import scrapy

import tmSpider.gooseeker.gsextractor as gsextractor

class TmallSpider(scrapy.Spider):
    name = "tmall"
    allowed_domains = ["tmall.com"]
    start_urls = (
        "https://world.tmall.com/item/526449276263.htm",
    )
    
    # 獲得當(dāng)前時(shí)間戳
    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):
        html = response.body
        print("----------------------------------------------------------------------------")
        extra=gsextractor.GsExtractor()
        extra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e", "淘寶天貓_商品詳情30474","tmall","list")

        result = extra.extract(html)
        print(str(result).encode("gbk", "ignore").decode("gbk"))
        #file_name = "F:/temp/淘寶天貓_商品詳情30474_" + self.getTime() + ".xml"
        #open(file_name,"wb").write(result)

6),啟動(dòng)爬蟲(chóng)

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

E:python-3.5.1simpleSpider>scrapy crawl tmall

輸出結(jié)果:

提一下,上述命令只能一次啟動(dòng)一個(gè)爬蟲(chóng),如果想同時(shí)啟動(dòng)多個(gè)呢?那就需要自定義一個(gè)爬蟲(chóng)啟動(dòng)模塊了,在spiders下創(chuàng)建模塊文件runcrawl.py,代碼如下

# -*- coding: utf-8 -*-

import scrapy
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner

from tmall import TmallSpider
...
spider = TmallSpider(domain="tmall.com")
runner = CrawlerRunner()
runner.crawl(spider)
...
d = runner.join()
d.addBoth(lambda _: reactor.stop())
reactor.run()

執(zhí)行runcrawl.py文件,輸出結(jié)果:

3,展望

以自定義DOWNLOADER_MIDDLEWARES調(diào)用PhantomJs的方式實(shí)現(xiàn)爬蟲(chóng)后,在阻塞框架的問(wèn)題上糾結(jié)了很長(zhǎng)的時(shí)間,一直在想解決的方式。后續(xù)會(huì)研究一下scrapyjs,splash等其他調(diào)用瀏覽器的方式看是否能有效的解決這個(gè)問(wèn)題。

4,相關(guān)文檔

1, Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng):API說(shuō)明

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

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

6,文檔修改歷史

1,2016-07-04:V1.0

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/38042.html

相關(guān)文章

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

    摘要:開(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)原則。 showImg(https://segmentfault.com/img/bVyzAX); 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)目將與S...

    Harriet666 評(píng)論0 收藏0
  • Python爬蟲(chóng)實(shí)戰(zhàn)(4):豆瓣小組話(huà)題數(shù)據(jù)采集—?jiǎng)討B(tài)網(wǎng)頁(yè)

    摘要:,引言注釋上一篇爬蟲(chóng)實(shí)戰(zhàn)安居客房產(chǎn)經(jīng)紀(jì)人信息采集,訪(fǎng)問(wèn)的網(wǎng)頁(yè)是靜態(tài)網(wǎng)頁(yè),有朋友模仿那個(gè)實(shí)戰(zhàn)來(lái)采集動(dòng)態(tài)加載豆瓣小組的網(wǎng)頁(yè),結(jié)果不成功。 showImg(https://segmentfault.com/img/bVzdNZ); 1, 引言 注釋?zhuān)荷弦黄禤ython爬蟲(chóng)實(shí)戰(zhàn)(3):安居客房產(chǎn)經(jīng)紀(jì)人信息采集》,訪(fǎng)問(wèn)的網(wǎng)頁(yè)是靜態(tài)網(wǎng)頁(yè),有朋友模仿那個(gè)實(shí)戰(zhàn)來(lái)采集動(dòng)態(tài)加載豆瓣小組的網(wǎng)頁(yè),結(jié)果不成功...

    blastz 評(píng)論0 收藏0
  • 使用php+phantomjs構(gòu)建一只簡(jiǎn)單爬蟲(chóng)的開(kāi)發(fā)思路

    摘要:嘮叨最近頻繁的給客戶(hù)做采集功能既然代碼無(wú)法公布所以一直想寫(xiě)個(gè)思路類(lèi)的文章既然是簡(jiǎn)單的爬蟲(chóng)那么一切自然以簡(jiǎn)單為原則能少用的都少用比如和這兩個(gè)神兵利器就被我省略了打造這只蟲(chóng)子就像是樵夫砍柴一般該磨刀還是要磨刀遠(yuǎn)觀拜拜山頭對(duì)象站點(diǎn)國(guó)內(nèi)知名電商平臺(tái) 嘮叨: 最近頻繁的給客戶(hù)做采集功能,既然代碼無(wú)法公布,所以一直想寫(xiě)個(gè)思路類(lèi)的文章.既然是簡(jiǎn)單的爬蟲(chóng),那么一切自然以簡(jiǎn)單為原則,能少用的都少用,比如...

    liangdas 評(píng)論0 收藏0
  • 中秋節(jié),哪種月餅比較好?

    摘要:可以看到在元的月餅銷(xiāo)量是反常的,說(shuō)明這個(gè)價(jià)格比較受人們歡迎。高檔的月餅在臨近中秋節(jié)會(huì)買(mǎi)的越來(lái)越好,這符合人們的消費(fèi)習(xí)慣。下一步重點(diǎn)研究買(mǎi)的好的店鋪,天貓超市與稻香村食品旗艦店,票券票務(wù)十年老店主要是賣(mài)月餅劵,后面會(huì)說(shuō)到。 造數(shù)帶你選月餅,點(diǎn)擊這里,過(guò)節(jié)再也不擔(dān)憂(yōu) showImg(https://segmentfault.com/img/remote/1460000011412184);...

    leeon 評(píng)論0 收藏0
  • Python3 實(shí)現(xiàn)淘女郎照片爬蟲(chóng)

    摘要:項(xiàng)目簡(jiǎn)介本實(shí)驗(yàn)通過(guò)使用實(shí)現(xiàn)一個(gè)淘寶女郎圖片收集爬蟲(chóng),學(xué)習(xí)并實(shí)踐及正則表達(dá)式等知識(shí)。本教程由阿發(fā)布在實(shí)驗(yàn)樓,完整教程及在線(xiàn)練習(xí)地址實(shí)現(xiàn)淘女郎照片爬蟲(chóng),可以直接在教程中下載代碼使用。 showImg(https://segmentfault.com/img/bVBgrF); 項(xiàng)目簡(jiǎn)介:本實(shí)驗(yàn)通過(guò)使用 Python 實(shí)現(xiàn)一個(gè)淘寶女郎圖片收集爬蟲(chóng),學(xué)習(xí)并實(shí)踐 BeautifulSoup、Sel...

    jindong 評(píng)論0 收藏0

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

0條評(píng)論

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