有緣網的資料爬回來了,但是放在redis裡沒有處理。之前我們配置檔案裡面沒有定製自己的item_pipelines,而是使用了redispipeline,所以現在這些資料都被儲存在redis的youyuan:items鍵中,所以我們需要另外做處理。
在scrapy-youyuan目錄下可以看到乙個process_items.py檔案,這個檔案就是scrapy-redis的example提供的從redis讀取item進行處理的模版。
假設我們要把youyuan:items中儲存的資料讀出來寫進mongodb或者mysql,那麼我們可以自己寫乙個process_youyuan_profile.py檔案,然後保持後台執行就可以不停地將爬回來的資料入庫了。
1.啟動mongodb資料庫:sudo mongod
2.執行下面程式:py2 process_youyuan_mongodb.py
# process_youyuan_mongodb.py
# -*- coding: utf-8 -*-
import json
import redis
import pymongo
defmain()
:# 指定redis資料庫資訊
rediscli = redis.strictredis(host=
'192.168.199.108'
, port=
6379
, db=0)
# 指定mongodb資料庫資訊
mongocli = pymongo.mongoclient(host=
'localhost'
, port=
27017
)# 建立資料庫名
db = mongocli[
'youyuan'
]# 建立表名
sheet = db[
'beijing_18_25'
]while
true
:# fifo模式為 blpop,lifo模式為 brpop,獲取鍵值
啟動mysql:mysql.server start(更平台不一樣)
登入到root使用者:mysql -uroot -p
建立資料庫youyuan:create database youyuan;
切換到指定資料庫:use youyuan
建立表beijing_18_25以及所有欄位的列名和資料型別。
執行下面程式:py2 process_youyuan_mysql.py
#process_youyuan_mysql.py
# -*- coding: utf-8 -*-
import json
import redis
import mysqldb
defmain()
:# 指定redis資料庫資訊
rediscli = redis.strictredis(host=
'192.168.199.108'
, port =
6379
, db =0)
# 指定mysql資料庫
mysqlcli = mysqldb.connect(host=
'127.0.0.1'
, user=
'power'
, passwd=
'******x'
, db =
'youyuan'
, port=
3306
, use_unicode=
true
)while
true
:# fifo模式為 blpop,lifo模式為 brpop,獲取鍵值
source, data = rediscli.blpop(
["youyuan:items"])
item = json.loads(data)
try:
# 使用cursor()方法獲取操作游標
cur = mysqlcli.cursor(
)# 使用execute方法執行sql insert語句
cur.execute(
"insert into beijing_18_25 (username, crawled, age, spider, header_url, source, pic_urls, monologue, source_url) values (%s, %s, %s, %s, %s, %s, %s, %s, %s )"
,[item[
'username'
], item[
'crawled'
], item[
'age'
], item[
'spider'
], item[
'header_url'
], item[
'source'
], item[
'pic_urls'
], item[
'monologue'
], item[
'source_url']]
)# 提交sql事務
mysqlcli.commit(
)#關閉本次操作
爬蟲基礎 Scrapy Redis分布式爬蟲元件
scrapy是乙個框架,他本身是不支援分布式的。如果我們想要做分布式的爬蟲,就需要借助乙個元件叫做scrapy redis,這個元件正是利用了redis可以分布式的功能,整合到scrapy框架中,使得爬蟲可以進行分布式。可以充分的利用資源 多個ip 更多頻寬 同步爬取 來提高爬蟲的爬行效率。可以充分...
scrapy redis分布式爬蟲
依賴環境 scrapy 1.1 redis 2.8 分布式爬蟲 將乙個專案拷貝到多台電腦上,同時爬取資料。1.必須保證所有電腦上的 是相同的配置。2.在其中一台電腦上啟動redis和mysql的資料庫服務。3.同時將所有的爬蟲專案執行起來。4.在啟動redis和mysql資料庫的電腦上,向redis...
scrapy redis分布式爬蟲
話不多說,先上scrapy scrapy流程圖 流程圖所示 當客戶端從伺服器端拿去任務進行資料爬取時,客戶端產生的資料,url 會再次提交給伺服器,進行資料抓取,產生新的response,在爬取的時候,產生的大量資料,可能會導致爬蟲的速度變慢,占用redis大量的儲存空間。scrapy redis常...