欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

scrapy處理python爬蟲調(diào)度詳解

 更新時間:2020年11月23日 14:07:55   作者:小妮淺淺  
在本篇文章里小編給大家整理的是一篇關(guān)于scrapy處理python爬蟲調(diào)度的相關(guān)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。

學(xué)習(xí)了簡單的知識點,就會想要向有難度的問題挑戰(zhàn),這里必須要夸一夸小伙伴們。不過我們今天不需要做什么程序的測試,只用簡單的兩個代碼對比,小伙伴們就能在其中體會兩者的不同和難易程度。scrapy能否適合處理python爬蟲調(diào)度的問題,小編直接說出答案小伙伴們也不能馬上信服,下面就讓我們在示例中找尋答案吧。

總的來說,需要使用代碼來爬一些數(shù)據(jù)的大概分為兩類人:

非程序員,需要爬一些數(shù)據(jù)來做畢業(yè)設(shè)計、市場調(diào)研等等,他們可能連 Python 都不是很熟;

程序員,需要設(shè)計大規(guī)模、分布式、高穩(wěn)定性的爬蟲系統(tǒng),對他們來說,語言都無所謂的,更別說用不用框架了。

對于一個任何一個已經(jīng)入門的程序員來說,Python 都算不上一個很復(fù)雜的語言,除了不用大括號可能讓一些人感覺有些不適應(yīng)之外,基本上看看語法上手就能寫了。但是恰恰是因為我們都是老司機(jī)了,所以不能體會到使用一門編程語言對于外行來說可能『比登天還難』。如果不用 scrapy,可能我只需要這樣:

import requests
def main():
  for i in range(100):
    rsp = requests.get(f"http://www.example.com/{i}.html")
    with open("example-{i}.txt", "w") as f:
      f.write(rsp.text)
if __name__ == "__main__":
  main()

就寫好了一個簡單的爬蟲,而使用 scrapy 呢,大概需要這樣吧:

import scrapy
class QuotesSpider(scrapy.Spider):
  name = 'quotes'
  def start_requests(self):
    urls = [
      'http://quotes.toscrape.com/page/1/',
      'http://quotes.toscrape.com/page/2/'
    ]
    for url in urls:
      yield scrapy.Request(url=url, callback=self.parse)
  def parse(self, response):
    page = response.url.split('/')[-2]
    filename = 'quotes-%s.html' % page
    with open(filename, 'wb') as f:
      f.write(response.body)
    self.log('Save file %s' % filename)

先不說代碼增長了一倍有余,初學(xué)者會問到這些問題:什么是 class?為什么類還有參數(shù)?啊,什么是繼承?yield 又是什么鬼,那個 scrapy.Request 又是啥?這些都是負(fù)擔(dān)。

既然要開發(fā)大型爬蟲系統(tǒng),那么其中很重要的一部分就是爬蟲的調(diào)度了。一種比較簡單的模式是 scheduler 作為 master,全局調(diào)度。另一種模式?jīng)]有 master,所有的爬蟲 worker 都是對等的。在實際生產(chǎn)中顯然是第一種用的更多。

顯然 scheduler 這部分是不能再用一個爬蟲框架來實現(xiàn)的,連主循環(huán)都沒有咋寫邏輯呢?我們可能還要實現(xiàn)增量爬取,或者消費業(yè)務(wù)方發(fā)來的爬取請求等各種業(yè)務(wù),這塊顯然是在 scheduler 里面的,那么這個爬蟲系統(tǒng)無非是 scheduler 分發(fā)任務(wù)給各個 worker 來抓取。worker 還可以使用 scrapy 實現(xiàn),但是呢,這個 worker 其實已經(jīng)弱化為一層薄薄的 downloader 了,那我要他干嘛呢?scrapy 的核心邏輯也不過是個深度或者廣度優(yōu)先的遍歷而已,少一個依賴不好么……

爬蟲的工作量要么在反爬,要么在調(diào)度等業(yè)務(wù)邏輯,本身只是一個 requests.get 而已,scrapy 提供的種種抽象對于初學(xué)者太復(fù)雜,大型系統(tǒng)又用不上,所以個人不推薦使用包括但不限于 scrapy 在內(nèi)的所有爬蟲框架。

內(nèi)容擴(kuò)展:

Scrapy模塊

1、scheduler:用來存放url隊列

2、downloader:發(fā)送請求

3、spiders:提取數(shù)據(jù)和url

4、itemPipeline:數(shù)據(jù)保存

from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
import time
import logging
from scrapy.utils.project import get_project_settings
 
 
#在控制臺打印日志
configure_logging()
#CrawlerRunner獲取settings.py里的設(shè)置信息
runner = CrawlerRunner(get_project_settings())
 
@defer.inlineCallbacks
def crawl():
 while True:
  logging.info("new cycle starting")
  yield runner.crawl("xxxxx")
  #1s跑一次
  time.sleep(1)
 reactor.stop()
 
crawl()
reactor.run()

到此這篇關(guān)于scrapy處理python爬蟲調(diào)度詳解的文章就介紹到這了,更多相關(guān)scrapy適合處理python爬蟲調(diào)度嗎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python opencv 實現(xiàn)對圖像邊緣擴(kuò)充

    python opencv 實現(xiàn)對圖像邊緣擴(kuò)充

    今天小編就為大家分享一篇python opencv 實現(xiàn)對圖像邊緣擴(kuò)充,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Pytorch相關(guān)知識介紹與應(yīng)用

    Pytorch相關(guān)知識介紹與應(yīng)用

    最近又重拾了機(jī)器學(xué)習(xí)的相關(guān)技術(shù),在本科畢設(shè)的階段下學(xué)習(xí)使用了Tensorflow 2.x工具,當(dāng)時也是不求甚解,直接拿來用了,但現(xiàn)在已經(jīng)有充足的時間、精力和基礎(chǔ)知識來重新學(xué)習(xí)一下
    2022-11-11
  • 簡單學(xué)習(xí)Python多進(jìn)程Multiprocessing

    簡單學(xué)習(xí)Python多進(jìn)程Multiprocessing

    這篇文章主要和大家一起簡單的學(xué)習(xí)Python多進(jìn)程Multiprocessing ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 淺談pytorch中的nn.Sequential(*net[3: 5])是啥意思

    淺談pytorch中的nn.Sequential(*net[3: 5])是啥意思

    這篇文章主要介紹了pytorch中的nn.Sequential(*net[3: 5])是啥意思,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python實現(xiàn)的爬蟲刷回復(fù)功能示例

    Python實現(xiàn)的爬蟲刷回復(fù)功能示例

    這篇文章主要介紹了Python實現(xiàn)的爬蟲刷回復(fù)功能,結(jié)合實例形式分析了Python2.7基于爬蟲實現(xiàn)的模擬登陸、刷帖、回復(fù)等功能相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-06-06
  • Django如何實現(xiàn)網(wǎng)站注冊用戶郵箱驗證功能

    Django如何實現(xiàn)網(wǎng)站注冊用戶郵箱驗證功能

    這篇文章主要介紹了Django如何實現(xiàn)網(wǎng)站注冊用戶郵箱驗證功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python中re模塊的元字符使用小結(jié)

    Python中re模塊的元字符使用小結(jié)

    元字符是正則表達(dá)式中具有特殊意義的專用字符,本文主要介紹了Python中re模塊的元字符使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Python中flatten( )函數(shù)及函數(shù)用法詳解

    Python中flatten( )函數(shù)及函數(shù)用法詳解

    flatten是numpy.ndarray.flatten的一個函數(shù),即返回一個一維數(shù)組。這篇文章主要介紹了Python中flatten( )函數(shù),需要的朋友可以參考下
    2018-11-11
  • 七個生態(tài)系統(tǒng)核心庫[python自學(xué)收藏]

    七個生態(tài)系統(tǒng)核心庫[python自學(xué)收藏]

    無論你是想快速入手Python,還是想成為數(shù)據(jù)分析大神或者機(jī)器學(xué)習(xí)大佬,亦或者對Python代碼進(jìn)行優(yōu)化,本文的python庫都能為你提供一些幫助
    2021-08-08
  • python裝飾器初探(推薦)

    python裝飾器初探(推薦)

    下面小編就為大家?guī)硪黄猵ython裝飾器初探(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論