1. 程式人生 > >scrapy分散式碰到的一些問題和解決方案

scrapy分散式碰到的一些問題和解決方案

在這裡插入圖片描述

1. scrapy多個items類piplines如何分別儲存

簡書,用if isinstance(item, items.py裡面的類)進行判斷就可以了。

2. Linux安裝Scrapy

linux: ubuntu16.04-64bit
python: 3.5.2

2.1 安裝環境

sudo apt-get install build-essential
sudo apt-get install python3-dev
sudo apt-get install libxml2-dev
sudo apt-get install libxslt1-dev
sudo apt-get install python3-setuptools

sudo apt-get install libssl-dev
apt-get install libffi-dev

2.2 安裝Scrapy: [scrapy執行必備元件需要(OpenSSL, lxml(lxml一般預設有安裝,可以import xml驗證是否有安裝))]

sudo python3 -m pip install Scrapy

2.3 安裝OpenSSL:

sudo python3 -m pip install pyopenssl

2.4 重新安裝python3版本的這兩個軟體:

sudo apt-get install python3-dev
sudo apt-get install python3-setuptools

2’ 教學視訊講解的安裝的方法

2.1 安裝作業系統級的配置

sudo apt-get install python3-dev build-essential python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
如果出錯 unable to fetch some archieve,maybe run apt-get update or...,可能太舊了,更新下 
su
apt-get update
再執行命令

2.2 安裝專案依賴的包

windows寫好的scrapy檔案

cmd到檔案目錄
將安裝的包都凍結,重定向到專案下的requirements.txt檔案中
pip freeze > requirements.txt

2.3 xshell讀取包內容

sz
rz 
找到檔案傳輸
安裝包
pip install virtualenvwrapper
mkvirtualenv -p /usr/bin/python3 crawler-env # 自己寫的虛擬環境名字
建立虛擬環境後自動進入
pip install -r requirements.txt 
一次性把依賴的包全部安裝完成
會報錯找不到pywin32包,進入檔案刪掉這個包就可以了,再安裝就可以

3. xshell伺服器拒絕密碼

想著可能自己忘記密碼了,答案見3.1,都是淚
參考百度知道
問題解決不了,沒辦法解除安裝重新安裝
答案:通過看YouTube視訊,解決了該問題,原來使用者名稱和密碼都是自己在Ubuntu設的,蠢哭了><

4. 切換root顯示su:認證失敗

sudo passwd
更新密碼
重新執行就好了

5. pip install virtualenvwrapper出錯

錯誤型別:/usr/bin/pip: 行 11: 未預期的符號 __main__._main' 附近有語法錯誤 /usr/bin/pip: 行 11: sys.exit(main._main())’

解決方法:獲得root許可權

python3 -m pip install xxxx

安裝完

[email protected]:~# vim .bashrc
[email protected]:~# source ~/.bashrc
/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.

If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.

python安裝位置 /usr/bin
vitualenvwrapper /usr/local/lib/python3.5/dist-packages
進入虛擬環境步驟:

source ~/.bashrc
mkvirtualenv -p /usr/bin/python3 crawler-env
sz
rz
pip install -r requirements.txt

6.mkvirtualenv:未找到命令

先嚐試下切換成root,輸入之前的命令,如果不行,再嘗試以下方法
1.升級python包管理工具pip

pip install --upgrade pip備註:當你想升級一個包的時候 pip install --upgrade 包名

2.python虛擬環境安裝

sudo apt-get install python-virtualenvsudo easy_install virtualenvwrapper

上述工具裝好後找不到mkvirtualenv命令,需要執行以下環境變數設定。

1.建立目錄用來存放虛擬環境 mkdir \$HOME/.virtualenvs
2.在~/.bashrc中新增行:

export WORKON_HOME=$HOME/.virtualenvs    
source /usr/local/bin/virtualenvwrapper.sh

3.執行: source ~/.bashrc

3.建立python虛擬環境

mkvirtualenv [虛擬環境名稱]workon [虛擬環境名稱]

4.退出虛擬環境 離開 deactivate

6.2 windows虛擬環境的安裝和配置

挖坑待填

7.改造為scrapy-redis

7.1 在spider裡面修改

from scrapy_redis.spiders import RedisSpider
class SfwSpider(RedisSpider):

7.2 將爬蟲的start_urls刪掉,增加redis_key=“xxx”

redis_key作用就是在redis中控制爬蟲啟動,爬蟲的第一個url就是在redis中通過這個傳送的

    # start_urls = ['http://www.fang.com/SoufunFamily.htm']
    redis_key = "fang:start_urls"

7.3 修改配置檔案

7.3.1 網路上搜集得到的

#啟用Redis排程儲存請求佇列

SCHEDULER="scrapy_redis.scheduler.Scheduler"

#確保所有的爬蟲通過Redis去重

DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"

#預設請求序列化使用的是pickle 但是我們可以更改為其他類似的。PS:這玩意兒2.X的可以用。3.X的不能用

#SCHEDULER_SERIALIZER = "scrapy_redis.picklecompat"

#不清除Redis佇列、這樣可以暫停/恢復 爬取

#SCHEDULER_PERSIST = True

#使用優先順序排程請求佇列 (預設使用)

#SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'

#可選用的其它佇列

#SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.FifoQueue'

#SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.LifoQueue'

#最大空閒時間防止分散式爬蟲因為等待而關閉

#SCHEDULER_IDLE_BEFORE_CLOSE = 10

#將清除的專案在redis進行處理

ITEM_PIPELINES={

'scrapy_redis.pipelines.RedisPipeline':300

}

#序列化專案管道作為redis Key儲存

#REDIS_ITEMS_KEY = '%(spider)s:items'

#預設使用ScrapyJSONEncoder進行專案序列化

#You can use any importable path to a callable object.

#REDIS_ITEMS_SERIALIZER = 'json.dumps'

#指定連線到redis時使用的埠和地址(可選)

#REDIS_HOST = 'localhost'

#REDIS_PORT = 6379

#指定用於連線redis的URL(可選)

#如果設定此項,則此項優先順序高於設定的REDIS_HOST 和 REDIS_PORT

#REDIS_URL = 'redis://user:[email protected]:9001'

#自定義的redis引數(連線超時之類的)

#REDIS_PARAMS  = {}

#自定義redis客戶端類

#REDIS_PARAMS['redis_cls'] = 'myproject.RedisClient'

#如果為True,則使用redis的'spop'進行操作。

#如果需要避免起始網址列表出現重複,這個選項非常有用。開啟此選項urls必須通過sadd新增,否則會出現型別錯誤。

#REDIS_START_URLS_AS_SET = False

#RedisSpider和RedisCrawlSpider預設 start_usls 鍵

#REDIS_START_URLS_KEY = '%(name)s:start_urls'

#設定redis使用utf-8之外的編碼

#REDIS_ENCODING = 'latin1'

7.3.2 實踐中需要的

# Scrapy-Redis相關的配置:
# 確保request儲存到redis中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 確保所有爬蟲共享相同的去重指紋
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 設定redis為item pipeline
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 300
}
#不清除Redis佇列、這樣可以暫停/恢復 爬取
SCHEDULER_PERSIST = True

# 設定連結redis資訊
REDIS_HOST = '192.168.252.1'
REDIS_PORT = 6379

7.4

專案打包,Linux虛擬環境下解包,

sz rz 

進入spider目錄

scrapy runspider sfw

開始監聽狀態
主機開啟redis-cli
推入一個開始的url連結

λ redis-cli
127.0.0.1:6379> lpush fang:start_urls http://www.fang.com/SoufunFamily.htm

8.redis

8.1 Linux的redis下載

下載地址
官網直接有下載安裝步驟
或者觀看菜鳥教程

8.2 配置其他機器連線本機

8.2.1 視訊教學得到

需要修改本機的redis.conf的配置檔案,將bind改為bind[自己的ip地址或者0.0.0.0]
注意:bind的是本機網絡卡的ip地址,而不是想讓其他機器連線的ip地址。
redis.conf
如何扎到Ubuntu的redis.conf
slave端無需啟動redis-server,Master端啟動即可。只要slave端取到Master的redis資料庫,就表示連線成功,可以分散式。

8.2.2下邊是自己實踐:

老是報錯:Redis protected-mode 配置檔案沒有真正啟動

  • 檢視主機和虛擬機器能否互相ping通,最開始自己忽略了,主機能ping通虛擬機器,但是虛擬機器ping不通主機
    解決方案: windows的防火牆沒有開啟ICMPv4-in這個規則,防火牆→高階→入站規則→配置檔案型別為“公用”的“檔案和列印共享(回顯請求 – ICMPv4-In)”規則,設定為允許。
  • 修改主機的redis.conf 進入檔案sudo vim /etc/redis/redis.conf
    • bind 127.0.0.1改為 #bind 127.0.0.1
    • protected-mode yes 改為 protected-mode no
    • 加入 daemonize no(這個是是否在後臺啟動不佔用一個主程視窗)
    • 如果需要設定密碼,requirepass foobared修改個強度高的密碼
  • 啟動服務的時候需要將配置檔案作為引數,例如:
D:\pythonic\redis
    λ redis-server.exe redis.windows.conf

9.離線後重啟

相關推薦

scrapy分散式碰到的一些問題解決方案

1. scrapy多個items類piplines如何分別儲存 見簡書,用if isinstance(item, items.py裡面的類)進行判斷就可以了。 2. Linux安裝Scrapy linux: ubuntu16.04-64bit python:

Android scroview 系列遇到的一些問題解決方案

1.推薦一個Google 的 com.github.ksoichiro.android.observablescrollview.ObservableScrollView 主要是這個監聽事件 做的很足 而且除了scrollview 之外其他一些滑動的view 也有 but,這個

關於PHP的 PHP-FPM程序CPU 100%的一些原因分析解決方案

之前碰到過php-fpmCPU高達80%-90%,特此記錄下 1. 檢視是否是硬體問題   方式:top  命令   主要檢視:load average(平均負載),這是一個4核8G記憶體的伺服器   1分鐘平均負載:2.32;   5分鐘平均負載:2.18;   15分鐘平均負載:3.95;   loa

一些SAP UI5的控制元件無法按照預期渲染的錯誤分析方法解決方案

我在index.html裡寫了下面這段程式碼: 'var oButton1 = new sap.m.Button({ text : "Button", tooltip : "This is a test tooltip",

Mysql海量資料儲存解決方案之一—分散式DB方案

    面對這樣的一個表,我們怎樣切分呢?怎樣將這樣的資料分佈到不同的資料庫中的表中去呢?其實分析blog的應用,我們不難得出這樣的結論:blog的應用中,使用者分為兩種:瀏覽者和blog的主人。瀏覽者瀏覽某個blog,實際上是在一個特定的使用者的blog下進行瀏覽的,而blog的主人管理自己的blog,也同

php執行時遇到的一些問題解決方案

1.用php指令碼向伺服器請求資料的時候,總是出現一些警告資訊: PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to us

網頁中QQ線上客服進行聊天的一些解決方案

說明 從瀏覽器喚起QQ進行聊天,是很多公司或者企業會用到的一種客服方式,然而很多時候,一些手機端瀏覽器並不支援直接跳轉到QQ,或者不支援從App內嵌的網頁中跳轉到QQ頁面。 正文 針對跳轉喚起QQ,QQ推廣的官方網站http://shang.qq.com/v3/i

分散式系統漫談【拾貳】_分庫分錶帶來的問題解決方案

本文來說說關於資料庫分庫分表。 分庫分表 當系統資料庫達到一定的量級,單資料庫例項已經無法支撐的時候,我們就要考慮採用分庫分表的策略了。如何理解這個名詞?其實分庫就是垂直拆分,按業務將資料拆

初次使用sprint-boot的一些常見問題解決方案

一、Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package.Error message:** WARNING ** : Your Applicati

談談對分散式事務的一點理解解決方案

## 前提 最近,工作中要為現在的老系統做拆分和升級,剛好遇到了分散式事務、冪等控制、非同步訊息亂序和補償方案等問題,剛好基於實踐結合個人的看法記錄一下一些方案和思路。 ## 分散式事務 首先,做系統拆分的時候幾乎都會遇到分散式事務的問題,一個模擬的案例如下: ![j-t-s-i-a-1.png]

多線程,多進程使用過程中的問題解決方案

共享 並發 之間 競爭 技術分享 參考 發生 pro 早期 次作,只是摘錄,組合而成,只能參考 多線程: 一個進程中可以有多條執行路徑同時執行,一個線程就是進程中的一條執行路徑。 在早期的操作系統中並沒有線程的概念,進程是能擁有資源和獨立運行的最小單位,也是程序執行的

OA常見問題解決方案

es2017 安裝目錄 常見 如果 更新 快速 關閉 快捷方式 message 本文檔:主要用來記錄OA常見的問題和解決方案。 (一)更新問題(登陸不了,或者登陸出錯) 由於很多用戶使用的是XP系統,導致每次進行OA進行升級的時候,他們都不支持自動升級。

QT常見問題解決方案整理

cpp recommend log 實現 utf tro int 發現 ring  最近重拾QT,發現百度能搜索到的東西甚少,所以上StackOverFlow上查了一些資料,覺得對自己有用的就做了記錄,方便以後查看,本篇基於Qt4.8.5,windows平臺。  問題1.

Cannot find module 'webpack/lib/node/NodeTemplatePlugin' 問題原因解決方案

dep webp template 文件 find 運行 sta gin strong 當我配置了html-webpack-plugin 打包時報了這個錯,查看了一下package.json發現沒有webpack,說明使用了全局安裝的webapck,導致的版本差異。 這裏

設計----【分布式事務】分布式事務解決方案

reat 錯誤 級別 err ons 撤銷 丟失 system 狀態 一、前言 分布式事務是企業集成中的一個技術難點,也是每一個分布式系統架構中都會涉及到的一個東西,特別是在微服務架構中,幾乎可以說是無法避免,本文就分布式事務來簡單聊一下。 二、數據庫事務 在說分布式

“錯誤 1067:進程意外終止”的原因解決方案

解決方案 microsoft bubuko buffer 圖片 src mysq mic ODB 錯誤原因: 1、mysql的配置文件裏面的innodb_buffer_pool_size的值設置太大了。 解決方案: 1、innodb_buffer_pool

硬盤數據丟失原因解決方案/數據恢復方法

硬盤 數據 恢復 壞道 故障一:"磁盤未被格式化,是否格式化"[適用介質]1、典型地-移動硬盤、U盤、數碼卡(相機、手機等)、MP3;2、普通硬盤;3、很少的-盤陣等采用WINDOWS系統的存儲; [故障表現]1、移動硬盤或U盤等,未正常關閉狀態下直接拔下,下次接入系統後雙

Eclipse部署Web項目時常見的錯誤解決方案

timeout 數據庫 light 請求 成功 重啟tomcat 線程 cep username Tomcat部署Web項目到tomcat 在eclipse中找到Servers項,打開服務器(F3)(建議直接刪除服務器,重新建立再設置比較好)1、Servers Locat

前端 - 關於開發時遇到的問題解決方案

onload orm evel 優點 異步上傳 round ase wid ons 工作不忙的時候,要學會總結。吃一塹長一智,道理如此; 1.關於移動端,頁面寬度超出屏幕寬度的問題; 布局時候不註意,對元素寬度設置100%,再設置padding或者margin就會出現這個問

虛擬機管理需要哪些功能,以及虛擬機管理常見問題解決方案

個性化 共享 使用率 cpu 自動同步 掛載iso 批量 磁盤使用 操作系統。 虛擬機裏面主要涉及哪些功能,虛擬機管理需要哪些功能,以及虛擬機管理常見問題和解決方案-CNware虛擬化軟件1 虛擬機部署部署單臺虛擬機:根據模板或者自定義方式創建單臺虛擬機,支持自主設置虛擬