云存储Redis(Cloud Redis Store)是腾讯云打造的兼容Redis协议的缓存和存储服务,提供主从版和集群版。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
当你使用Python写分布式爬虫的时候就需要使用Redis了,今天这篇文章就让我们走进分布式爬虫的世界。
第一步你可以先在 https://www.qcloud.com/product/crs 页面购买云存储Redis,可以继续使用之前的实名认证的优惠券;如果你是学生你可以进行学生认证,会有更多优惠。
购买完成之后访问:https://console.qcloud.com/redis 页面,在此页面需要自己配置初始化密码。如下图,第一条为刚购买未初始化密码的,只需要点击初始化密码并设计密码即可,第二条为已经初始化完成的。现在我们就可以通过IP,以及你刚刚设置的密码进行访问了。同时请记住你的实例的内网地址,这就是你下面连接此实例时候使用的IP,这里我的第二条已经初始化好的实例的地址端口是:10.66.161.215:6379
因为我们需要做爬虫,需要使用Python操作Redis,需要我们自己去了解其中的原理吗?不需要,Python中有这样的一个库:redis,只需要在我们之前配置好的腾讯云服务器上执行命令:pip install redis
显示Successfully installed redis则表示安装成功了,下面我们先做一些测试。说一个坑:腾讯云用Python连接云存储的时候密码不是你创建该实例的时候的密码,真实的密码格式为:实例ID:你自己设置的密码
import requests
import re
import time
from redis import Redis
headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36' }
def push_redis_list():
r = Redis(host='10.66.149.8',port=6379,password='')
for i in range(100):
num = 5100+i;
url ='http://www.meizitu.com/a/'+ str(num) +'.html'
img_url = requests.get(url,timeout=30)
#print img_url.text
#time.sleep(10)
img_url_list = re.findall('http://mm.howkuai.com/wp-content/uploads/201.*.jpg',img_url.text)
print(img_url_list)
for temp_img_url in img_url_list:
l = len(re.findall('limg',temp_img_url))
#print l
if(l == 0):
print("url: ",temp_img_url)
r.lpush('meizitu',temp_img_url)
print(r.llen('meizitu'))
return 0
def get_big_img_url():
r = Redis(host='10.66.149.8',port=6379,password='')
while(1):
try:
url = r.lpop('meizitu')
download(url)
time.sleep(1)
print(url)
except:
print("请求求发送失败重试")
time.sleep(10)
continue
return 0
def download(url):
try:
r = requests.get(url,headers=headers,timeout = 50)
name = int(time.time())
f = open('./pic/'+str(name)+'.jpg','wb')
f.write(r.content)
f.close()
except Exception as e:
print(Exception,":",e)
if __name__ == '__main__':
url = 'http://www.meizitu.com/a/list_1_'
print("begin")
push_redis_list()#开启则加任务队列
#get_big_img_url()#开启则运行爬取任务
这段代码用来下载美图网上100个页面的所有的图片,我们的思路是先把100个页面上的所有的图片url存储到redis上面。就上面的代码中push_redis_list函数所实现的。
接着,我们用两台云服务器同时连接redis执行get_big_img_url函数,第二台服务器的配置请参照前面的两篇配置文章。
之后你将会在你的脚本的目录下的一个pic文件夹里面看到下载的美图。
相关推荐
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。