Scrapy詳解

1、爬蟲生態框架python

在管道傳數據只能傳字典和items類型。git

將 上一return語句註釋則會報錯  如:github

 

 

如上圖,爬蟲文件中有一個name屬性,若是多個爬蟲能夠經過這個屬性在管道控制分析的是哪一個爬蟲的數據redis

日誌文件shell

添加紅框裏面的一條代碼,讓打印結果只顯示warning級別及以上的警告數據庫

 

如何保存日誌信息瀏覽器

發現運行後沒有任何輸出緩存

項目中多了log.log日誌文件數據結構

打開log.log日誌文件即日誌信息框架

 items類型對象

在items文件中聲明瞭name、last的鍵在爬蟲文件中聲明便可用

 

scrapy shell 用法

scrapy shell + 網址  會進入一個ipython能夠測試response  如:

模仿瀏覽器

改成本身瀏覽器的user_agent信息

 

更改遵照robots規則

將True改成False

 提取下一頁url: scrapy.Request(url, callback)用來獲取網頁裏的地址

 callback:指定由那個函數去處理

 分佈式爬蟲:

1.多臺機器爬到的數據不能重複

2.多臺機器爬到的數據不能丟失

 

  1.redis是什麼?

    Redis是一個開源的、內存數據庫,他能夠用做數據庫、緩存、消息中間件。它支持多種數據類型的數據結構,如字符串、哈希、列表、集合、有序集合(可能存在數據丟失)

     redis安裝  Ubuntu: sudo apt-get install redis-server    Centos:sudo yum install redis-server

    檢測redis狀態

        

    redis服務的開啓:sudo /etc/init.d/redis-server start

    重啓:sudo /etc/init.d/redis-server restart

    關閉:sudo /etc/init.d/redis-server stop

    redis鏈接客戶端:redis-cli

    redis遠程鏈接客戶端:redis-cli -h<hostname> -p  <port>(默認6379)

    redis經常使用命令:

      選擇數據庫:select 1  (第一個數據庫爲0 ,默認16個數據庫,可修改配置文件修改數據庫個數且個數沒有上限)

      

    查看數據庫裏的內容:keys *

    向數據庫加列表:lpush mylist a b c d (數據可重複)

    查看列表數據:lrange mylist 0 -1

      

    查看列表元素個數:llen mylist

       

    向set中加數據:sadd myset a b c d(不能重複,無序)

      

    查看set中的數據:smembers myset

      

    查看set中的元素個數:scard myset

      

    向有序zset中添加數據:zadd myzset 1 a 2 b 3 c 4 d

      

    查看zset編號和數據:zrange myzset 0 -1 withscores

       

    查看zset數據

      

    改變編號 如改變a的編號:

      

    統計zset元素的個數zcard myzset

      

    刪除當前數據庫:flushdb

    清楚全部數據庫:flushall

  安裝scrapy-redis

    sudo pip install scrapy_redis

  下載scrapy-redis例子:git clone https://github.com/rolando/scrapy-redis.git

  setting.py中:


# 去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 調度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 調度器內容持久化
SCHEDULER_PERSIST = True

 

ITEM_PIPELINES = {
'example.pipelines.ExamplePipeline': 300,
# 負責把數據存儲到redis數據庫裏
'scrapy_redis.pipelines.RedisPipeline': 400,
}

最後需把redis加上

  

    序列化:把一個類的對象變成字符串最後保存到文件

    反序列化:保存到文件的對象是字符串格式  -->  讀取字符串 --> 對象

 

 

 

 

注:後臺打印的數據較雜亂,我只想要本身爬到的東西怎麼辦?

第一步:

  setting.py中加  LOG_LEVEL = 'WARNING'  

  這句代碼會將沒必要要的數據屏蔽,屏蔽的數據以下:

  

 

第二步:

  然而如今還不是最簡潔的,還有雜項。這樣作,將response.xpath('*********')變成response.xpath('*********').extract()

  

  怎麼樣是否是你想要的。

相關文章
相關標籤/搜索