"107603" + user_id
組裝獲得,無需請求我的信息獲取;urllib.request
全局定義,致使代理沒法正常切回本地IP;ConnectionPool
,解決因Redis連接端口數過多致使Redis拒絕服務錯誤。類型 | 效果 | 代理花費 |
---|---|---|
單機版(多線程+多進程) | 150萬/天 | 0 |
單機版(多線程+多進程)+IP代理池 | 1000萬/天 | 100元/天 |
分佈式(多線程+多進程)+IP代理池 | 千萬~億級 | 100*機器數量/天 |
save_uid.py
腳本將準備好的微博用戶ID,存入Redis中,保存兩份;
r.lpush(WEIBO_UID_LIST_KEY, uid)
用於第一次遍歷UID請求每一個UID的總頁數,而後生成每一個UID的全部URL。r.sadd(WEIBO_UID_SET_KEY, uid)
用於第二次請求,隨機獲取一個未抓取完的UID,去Redis中取當前UID剩餘的URL進行抓取,所有抓取完畢則移除此UID。proxy_pool.py
腳本,初始化IP代理池(若是不使用代理,此步驟可略過)
target_money
用來獲取你所購買的IP代理剩餘金額的URL鏈接target_ip
請求代理IP獲取有效的代理IPtargetUrl
用來校驗當前IP是否有效WEIBO_PROXY_SET_KEY
存儲有效的代理IPWEIBO_PROXY_418_SET_KEY
存儲已經出現418錯誤的IP,會循環利用,直到代理失效WEIBO_ERROR_PROXY_SET_KEY
存儲已經使用過的IP(失效IP),用於後期校驗start_crawler.py
腳本,開啓抓取任務
save_uid.py
和 proxy_pool.py
腳本redis_consumer.py
腳本的運行部署start_crawler.py
能夠集羣部署到多臺服務器,但要保證都能網絡連通到Redis服務器crontab -e
內容 以下0 */1 * * * nohup python /data/hw/redis_consume.py > /dev/null 2>&1 &
service cron restart
重啓cron定時服務建立start.sh 開啓多進程抓取
```bash
#!/bin/bash
# 開始爬蟲程序;python
for((i=1;i<=5;i++));
do
nohup python /data/hw/start_crawler.py 1>/dev/null 2>&1 &
echo "開啓爬蟲程序進程"+$i
donegit
sleep 5s
echo "已開啓如下進程"
ps -ef|grep pythongithub
```redis