"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