94 爬蟲 scrapy redis實戰(五)

2021-09-26 18:59:07 字數 3433 閱讀 8661

有緣網的資料爬回來了,但是放在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常...