最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

學(xué)習(xí)了簡單的知識(shí)點(diǎn),就會(huì)想要向有難度的問題挑戰(zhàn),這里必須要夸一夸小伙伴們。不過我們今天不需要做什么程序的測試,只用簡單的兩個(gè)代碼對(duì)比,小伙伴們就能在其中體會(huì)兩者的不同和難易程度。scrapy能否適合處理python爬蟲調(diào)度的問題,小編直接說出答案小伙伴們也不能馬上信服,下面就讓我們?cè)谑纠姓覍ご鸢赴伞?/p>

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

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

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

對(duì)于一個(gè)任何一個(gè)已經(jīng)入門的程序員來說,Python 都算不上一個(gè)很復(fù)雜的語言,除了不用大括號(hào)可能讓一些人感覺有些不適應(yīng)之外,基本上看看語法上手就能寫了。但是恰恰是因?yàn)槲覀兌际抢纤緳C(jī)了,所以不能體會(huì)到使用一門編程語言對(duì)于外行來說可能『比登天還難』。如果不用 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()

就寫好了一個(gè)簡單的爬蟲,而使用 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é)者會(huì)問到這些問題:什么是 class?為什么類還有參數(shù)?啊,什么是繼承?yield 又是什么鬼,那個(gè) scrapy.Request 又是啥?這些都是負(fù)擔(dān)。

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

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

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

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

Scrapy模塊

1、scheduler:用來存放url隊(duì)列

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

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
 
 
#在控制臺(tái)打印日志
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

清涧县| 克山县| 黔西县| 莱西市| 新河县| 固原市| 武穴市| 平阴县| 铜川市| 饶阳县| 万源市| 揭阳市| 琼结县| 叶城县| 手游| 南城县| 肇庆市| 资中县| 宜兰县| 宽城| 新民市| 方正县| 太原市| 临邑县| 武汉市| 鱼台县| 洞口县| 若羌县| 鹰潭市| 鄂托克前旗| 科尔| 浦江县| 张北县| 大荔县| 桑植县| 乌兰县| 大竹县| 涿州市| 枞阳县| 尖扎县| 许昌县|