1. 程式人生 > >scrapy-redis下載及專案講解

scrapy-redis下載及專案講解

首先,如果沒有下載git,執行後續命令時,可能會報錯。

安裝很簡單,一直進行下一步即可(個別選項依照個人需求更改)

空白處滑鼠右擊,點選 Git Bash Here 出現視窗,輸入命令:git --version 即可檢視當前下載的git版本(效果如下)

接下來就來下載 scrapy-redis專案

 在桌面新建資料夾(名字自定義),然後開啟cmd終端,cd到剛才新建的資料夾路徑,輸入命令:git clone + 複製專案的下載路徑,回車執行完畢後,專案就下載好了,檔案中顯示內容大致如下:

 將資料夾拖入到PyChrom中,點選example下,進入到settings 裡面,確保下方程式碼處於解註釋狀態

# 使用scrapy_redis的去重類  不使用scrapy預設的去重類
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy_redis的排程器,不使用scrapy預設的排程器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 控制爬蟲是否允許暫停
SCHEDULER_PERSIST = True


ITEM_PIPELINES = {
    'example.pipelines.ExamplePipeline': 300,
    # 使用redis資料庫所要新增的管道,如果使用redis資料庫 必須新增
    'scrapy_redis.pipelines.RedisPipeline': 400,、

#這兩句程式碼可寫可不寫,如若不寫,預設為本機ip
REDIS_HOST = '127.0.0.1'  # redis資料庫的ip
# 埠為數字
REDIS_PORT = 6379

接下來就自帶的三個爬蟲小程式進行實操講解:

(1)dmoz專案(此處為單機爬蟲)

由於 dmoz.com已經於去年停止使用,所以這裡就改爬紅袖小說的小說名字......

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class DmozSpider(CrawlSpider):
    """Follow categories and extract links."""
    name = 'dmoz'
    allowed_domains = ['hongxiu.com']
    start_urls = ['https://www.hongxiu.com/finish']
    # 規則
    rules = [
        # 獲取網頁的指定內容 然後進入到指定方法裡面
        Rule(LinkExtractor(
            restrict_css=('.book-info')
            # follow 設定是否繼續執行後面的內容
            # 如果有回撥函式,則預設為False 否則為True
        ), callback='parse_directory', follow=True),
    ]

    def parse_directory(self, response):
        # for div in response.css('.title-and-desc'):
        #     yield {
        #         'name': div.css('.site-title::text').extract_first(),
        #         'description': div.css('.site-descr::text').extract_first().strip(),
        #         'link': div.css('a::attr(href)').extract_first(),
        #     }
        print('----------------')
        print(response.url)

在執行命令之前,先在終端開啟redis資料庫(命令:redis-server redis.windows.conf),之後再開啟一個cmd終端視窗,cd到當前需執行的資料夾路徑下,然後輸入命令:scrapy crawl dmoz 即可。

(2.)mycrawler_redis專案(分散式爬蟲)

注意:網頁連結依然引用紅袖連結

from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor

from scrapy_redis.spiders import RedisCrawlSpider


class MyCrawler(RedisCrawlSpider):
    """Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'mycrawler_redis'
    # allowde_domains = ['biadu.com']

    redis_key = 'mycrawler:start_urls'  # 類名 : start_urls  推薦寫法;標準寫法
    # start_urls = ['']

    rules = (
        # follow all links
        Rule(LinkExtractor(), callback='parse_page', follow=True),
        # Rule(LinkExtractor(), callback='detali')
    )
    # 初始化方法
    # def __init__(self, *args, **kwargs):
    #     #   動態的    定義   allowde允許 domains域名 list列表
    #     # Dynamically define the allowed domains list.
    #     # 此處動態定義域名列表
    #     domain = kwargs.pop('domain', '')
    #     # self.allowed_domains = filter(None, domain.split(','))
    #     # super 後面寫自己的類名
    #     super(MyCrawler, self).__init__(*args, **kwargs)

    def parse_page(self, response):
        # return {
        #     'name': response.css('title::text').extract_first(),
        #     'url': response.url,
        # }
        print('============================')
        print(response.url)

開啟cmd終端,輸入命令:scrapy crawl mycrawler_redis ,執行後,會到下圖位置停止:

這裡先不要關閉或者停止執行,另外開啟一個cmd終端,輸入命令:redis-cli,效果如下:

 接著再次輸入命令:lpush key值(redis-key值)  value值(爬取的網頁連結) 回車,上一個終端命令即可繼續執行(因為在等待請求網頁連結)

開啟redis資料庫資料庫檢視:

第三個小專案跟第二個專案類似,這裡就跳過了。