<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **1. 編寫普通爬蟲** ```shell >scrapy startproject jdbooks >cd jdbooks >scrapy genspider jdbooksspider jd.com ``` <br/> **2. 將普通爬蟲改造成分布式爬蟲** (1)修改你的爬蟲 `jdbooksspider.py` ```python """ @Date 2021/4/28 """ import scrapy # 1. 導入RedisSpider from scrapy_redis.spiders import RedisSpider # 2. 繼承RedisSpider # class JdbooksspiderSpider(scrapy.Spider): class JdbooksspiderSpider(RedisSpider): name = 'jdbooksspider' # 3. 注銷allowed_domains和start_urls # allowed_domains = ['jd.com'] # start_urls = ['https://book.jd.com/booksort.html'] # 4. 設置 redis_key # redis_key是固定變量名,不能更改 # 當往Redis數據庫讀取或寫入初始url時,尋找的就是redis_key對應的值 redis_key = 'jdbooks' # 5. 設置 __init__ 函數 def __init__(self, *args, **kwargs): # 當沒有傳入domain參數,則默認為 '' domain = kwargs.pop('domain', '') # 多個允許的域采用 , 分割 self.allowed_domains = list(filter(None, domain.split(','))) super(JdbooksspiderSpider, self).__init__(*args, **kwargs) def parse(self, response): pass ``` <br/> (2)修改`settings.py`配置 ```python ###### 添加如下配置 ######### # 設置重復過濾器的模塊 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 設置調度器,調度器具備與redis數據庫交互的功能 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 設置當爬蟲結束時是否保持redis數據庫中沒有完成的任務 # True: 保持,如果因為某些原因導致任務中斷,則沒有完成的任務繼續進行 # False: 不保持,任務結束就會清空數據庫,則所有的任務都將從頭開啟執行 SCHEDULER_PERSIST = True #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue" #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue" #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack" ITEM_PIPELINES = { 'example.pipelines.ExamplePipeline': 300, # 當開啟該管道,該管道將會自動把指紋、items、request請求信息存儲到redis數據庫中 'scrapy_redis.pipelines.RedisPipeline': 400, } # 設置redis數據庫 REDIS_URL = "redis://localhost:6379" # 或者采用下面這種方式設置 # REDIS_HOST = 'localhost' # REDIS_PORT = 6379 LOG_LEVEL = 'DEBUG' # Introduce an artifical delay to make use of parallelism. to speed up the # crawl. DOWNLOAD_DELAY = 1 ``` <br/> **3. 啟動分布式爬蟲** ```shell # 打開不同的終端,切換到 jdbooksspider.py 爬蟲文件所在目錄下 # 假如啟動三個爬蟲,分別在3個終端中運行 # scrapy runspider jdbooksspider.py # 終端窗口1 >scrapy runspider jdbooksspider.py # 終端窗口2 >scrapy runspider jdbooksspider.py # 終端窗口3 >scrapy runspider jdbooksspider.py ``` 當redis數據庫中沒有`redis_key`時,三個爬蟲程序處于等待狀態。 <br/> **4. 往redis數據庫中保存一個redis_key** ```shell # redis_key=jdbooks > lpush jdbooks https://book.jd.com/booksort.html ``` 當往redis數據庫 push 一個 start_urls 后,上面三個程序根據自身的速度搶占 start_urls,誰搶到由誰向 start_urls 發起請求。 <br/> **5. redis數據庫中的信息** 當爬蟲程序跑起來后,會在Redis數據庫自動生成如下三個數據: ![](https://img.kancloud.cn/24/99/24998419dcadfb2f35131e99a533d3a0_1150x122.jpg) dupefilter:去重后的指紋信息,每個指紋信息都是唯一的(可以持久化); items:只要有一次 `yield item`,就會被保存到 items中,每個item都是唯一的(可以持久化); requests: 記錄每次請求信息,每個請求都是唯一的(好像不能持久化,爬蟲結束后就不存在了);
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看