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

資訊專欄INFORMATION COLUMN

【Sasila】一個簡單易用的爬蟲框架

yacheng / 2280人閱讀

摘要:所以我模仿這些爬蟲框架的優勢,以盡量簡單的原則,搭配實際上是開發了這套輕量級爬蟲框架。將下載器,解析器,調度器,數據處理器注入核心成為對象。提供對爬蟲進行管理監控。每個腳本被認為是一個,確定一個任務。

??現在有很多爬蟲框架,比如scrapywebmagicpyspider都可以在爬蟲工作中使用,也可以直接通過requests+beautifulsoup來寫一些個性化的小型爬蟲腳本。但是在實際爬取過程當中,爬蟲框架各自有優勢和缺陷。比如scrapy,它的功能強大,但過于強大的功能也許反而讓新手無所適從,并且它采用twisted異步框架開發,對新手來說源碼難以理解,項目難于調試。所以我模仿這些爬蟲框架的優勢,以盡量簡單的原則,搭配gevent(實際上是grequests)開發了這套輕量級爬蟲框架。

downloader是下載器。

processor是解析器。

scheduler是調度器。

pipeline是數據處理器。

將下載器,解析器,調度器,數據處理器注入核心core成為spider對象。

通過manager管理spider對象

manager透過webapi提供外部訪問/控制接口

主要特點

框架代碼結構簡單易用,易于修改。新手、老鳥皆可把控。

采用gevent實現并發操作,與scrapy的twisted相比,代碼更容易理解。

完全模塊化的設計,強大的可擴展性。

使用方式和結構參考了scrapywebmagic。對有接觸過這兩個框架的朋友非常友好。

不采用命令行來啟動爬蟲,方便調試。

對數據的解析模塊并沒有集成,可以自由使用beautifulsouplxmlpyqueryhtml5lib等等各種解析器進行數據抽取。

集成代理換IP功能。

支持高并發采集數據。

支持分布式。

支持增量爬取。

支持爬取js動態渲染的頁面(加載SeleniumDownLoader即可)。

提供webapi對爬蟲進行管理、監控。

提供即時爬蟲的集成思路和結構。

安裝
pip install sasila
準備

請準備好您的redis服務器進行調度。

并在settings.py文件中 寫入您的redis服務器地址

REDIS_HOST = "localhost"
REDIS_PORT = 6379
構建processor(解析器)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup as bs
from sasila.system_normal.processor.base_processor import BaseProcessor
from sasila.system_normal.downloader.http.spider_request import Request
from sasila.system_normal.spider.request_spider import RequestSpider

class Mzi_Processor(BaseProcessor):
    spider_id = "mzi_spider"
    spider_name = "mzi_spider"
    allowed_domains = ["mzitu.com"]
    start_requests = [Request(url="http://www.mzitu.com/", priority=0)]

    @checkResponse
    def process(self, response):
        soup = bs(response.m_response.content, "lxml")
        print soup.title.string
        href_list = soup.select("a")
        for href in href_list:
            yield Request(url=response.nice_join(href["href"]))

寫法與scrapy幾乎一樣

所有的解析器都繼承自 BaseProcessor ,默認入口解析函數為def process(self, response)。

為該解析器設置spider_id和spider_name,以及限定域名。

初始爬取請求為 start_requests,構建Request對象,該對象支持GET、POST方法,支持優先級,設置回調函數等等所有構建request對象的一切屬性。默認回調函數為 process

可以使用@checkResponse裝飾器對返回的 response 進行校驗并記錄異常日志。你也可以定義自己的裝飾器。

解析函數因為使用 yield 關鍵字,所以是一個生成器。當 yield 返回 Request 對象,則會將 Request 對象推入調度器等待調度繼續進行爬取。若 yield 不是返回 Request 對象則會進入 pipelinepipeline 將對數據進行清洗入庫等操作。

與scrapy相似,sasila同樣提供LinkExtractor的方式來提取鏈接,以下是用LinkExtractor的方式構造processor下載妹子圖的示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sasila.system_normal.processor.base_processor import BaseProcessor, Rule, LinkExtractor
from sasila.system_normal.downloader.http.spider_request import Request
import os
import uuid

class MezituProcessor(BaseProcessor):
    spider_id = "mzitu"
    spider_name = "mzitu"
    allowed_domains = ["mzitu.com", "meizitu.net"]
    start_requests = [Request(url="http://www.mzitu.com/xinggan/")]

    rules = (
        Rule(LinkExtractor(regex_str=r"http://i.meizitu.net/d{4}/d{2}/[0-9a-z]+.jpg"),callback="save", priority=3),
        Rule(LinkExtractor(regex_str=r"http://www.mzitu.com/d+"), priority=1),
        Rule(LinkExtractor(regex_str=r"http://www.mzitu.com/d+/d+"), priority=2),
        Rule(LinkExtractor(regex_str=r"http://www.mzitu.com/xinggan/page/d+"), priority=0),
    )

    def save(self, response):
        if response.m_response:
            if not os.path.exists("img"):
                os.mkdir("img")
            with open("img/" + str(uuid.uuid1()) + ".jpg", "wb") as fs:
                fs.write(response.m_response.content)
                print("download success!")

LinkExtractor的構造方式為

LinkExtractor(regex_str=None, css_str=None, process_value=None)

提供正則表達式提取方式:regex_str

提供css選擇器提取方式:css_str

也可以自定義process_value來提取鏈接,其中process_value是一個生成器

若使用此方式構造processor,請不要定義默認入口函數def process(self, response)

構建pipeline

該pipeline獲取數據后將數據轉為json格式,并輸出到屏幕

from sasila.system_normal.pipeline.base_pipeline import ItemPipeline
import json

class ConsolePipeline(ItemPipeline):
    def process_item(self, item):
        print json.dumps(item).decode("unicode-escape")
構建spider(爬蟲對象)

通過注入 processor 生成spider對象

from sasila.system_normal.spider.request_spider import RequestSpider

spider = RequestSpider(Mzi_Processor())

RequestSpider對象包含批下載數量 batch_size,下載間隔 time_sleep,使用代理 use_proxy 等一切必要的屬性

RequestSpider(processor=None, downloader=None, use_proxy=False,scheduler=None,batch_size=None,time_sleep=None)

本項目集成使用代理IP的功能,只要在構建RequestSpider時將 use_proxy 設置為 True,并在腳本同級目錄下放置proxy.txt文件即可。你也可以在settings.py文件中寫入代理IP文件路徑。

PROXY_PATH_REQUEST = "proxy/path"

proxy.txt文件中請寫入代理IP,格式為:IP,端口號。若該代理IP有賬號密碼,在末尾追加賬號密碼即可。

127.0.0.1,8080
127.0.0.2,8080,user,pwd
127.0.0.3,8080,user,pwd

RequestSpider已經默認設置好了 downloaderscheduler,如果不滿意,可以自己進行定制。

可以為spider設置 downloaderpipeline 甚至 scheduler

 spider = spider.set_pipeline(ConsolePipeline())

可以通過該方式啟動爬蟲

spider.start()

也可以將spider注入manager進行管理

from sasila.system_normal.manager import manager
from sasila import system_web

manager.set_spider(spider)

system_web.start()

訪問 http://127.0.0.1:5000/slow_sp... 來啟動爬蟲。
訪問 http://127.0.0.1:5000/slow_sp... 來停止爬蟲。
訪問 http://127.0.0.1:5000/slow_sp... 來查看爬蟲詳細信息。

針對需要登錄才能爬取的處理辦法

可以為downloader加載登錄器(loginer),在使用downloader的時候使用loginer進行登錄獲取cookies,再進行爬取

也可以自己定義一個cookie池,批量進行登錄并將登錄成功的cookies放進cookie池中隨時進行取用。項目中暫時沒有這些功能。歡迎pull request~

架構

任務由 scheduler 發起調度,downloader 抓取網頁內容, processor 執行預先編寫的py腳本,輸出結果或產生新的提鏈任務(發往 scheduler),形成閉環。

每個腳本被認為是一個spider,spiderid確定一個任務。

downloader
1.method, header, cookie, proxy,timeout 等等抓取調度控制。

2.可以通過適配類似 phantomjs 的webkit引擎支持渲染。

processor
1.靈活運用pyquery,beautifulsoup等解析頁面。

2.在腳本中完全控制調度抓取的各項參數。
3.可以向后鏈傳遞信息。
4.異常捕獲。

scheduler
1.任務優先級。

2.對任務進行監控。
3.對任務進行去重等操作。
4.支持增量。

webApi
1.對爬蟲進行增刪改查等操作。

即時爬蟲

即時爬蟲是可以通過api調用,傳入需要爬取的頁面或者需求,即時爬取數據并返回結果。現階段開發并不完善。僅提供思路參考。示例核心代碼在 sasila.system_instant 中。

為啥叫Sasila?

作為一個wower,你可以猜到嗎ヾ( ̄▽ ̄)

聯系方式

如果對使用有疑問,或者有想法,歡迎加入討論群:602909155交流~

項目地址

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40628.html

相關文章

  • 高效率爬蟲框架之pyspider

    摘要:一個爬蟲框架的雛形,應該包含調度器隊列請求對象等。我們平時寫的爬蟲程序,連最基本的框架都不具備。這樣,不僅開發效率會提高很多,而且爬蟲的健壯性也更強。支持多種消息隊列如。將抓取任務分發給進行抓取,執行并得到響應隨后將響應發送給。 showImg(https://segmentfault.com/img/remote/1460000015557057); 為什么要使用爬蟲框架 在我們平常...

    MasonEast 評論0 收藏0
  • 一批,那些你不得不知 Python 殺手級框架

    摘要:那在屆有哪些被封神的庫呢,今天就給大家介紹十個堪稱殺手級別的工具包。總之,是一款非常強大且易用的網絡請求庫。地址最好用的框架。圖像處理,該庫是你的不二之選。 Pyt...

    zeyu 評論0 收藏0
  • 一批,那些你不得不知 Python 殺手級框架

    摘要:那在屆有哪些被封神的庫呢,今天就給大家介紹十個堪稱殺手級別的工具包。該庫是在之上完善的,自此請求就變得異常的簡單,一行代碼即可搞定。這是最流行的網絡爬蟲框架庫,沒有之一。最好用的框架。圖像處理,該庫是你的不二之選。 文 |?豆豆 來源:Python 技術「ID: pythonall」 ...

    ninefive 評論0 收藏0
  • 基于 ZooKeeper 實現爬蟲集群監控

    摘要:各個爬蟲的節點通過注冊到從而實現爬蟲集群的管理。是一款基于等框架實現的通用爬蟲框架。爬蟲集群的監控包含了和。用于實現爬蟲的業務邏輯,可以添加到,由來管理各個的生命周期。ZooKeeper showImg(https://user-gold-cdn.xitu.io/2019/5/27/16af702ccb4a3d84); ZooKeeper 是一個開源的分布式協調服務,ZooKeeper框架...

    Backache 評論0 收藏0
  • Python爬蟲之Scrapy學習(基礎篇)

    摘要:下載器下載器負責獲取頁面數據并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。一旦頁面下載完畢,下載器生成一個該頁面的,并將其通過下載中間件返回方向發送給引擎。 作者:xiaoyu微信公眾號:Python數據科學知乎:Python數據分析師 在爬蟲的路上,學習scrapy是一個必不可少的環節。也許有好多朋友此時此刻也正在接觸并學習sc...

    pkhope 評論0 收藏0

發表評論

0條評論

yacheng

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<