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()
怎麼樣是否是你想要的。