前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python操作Redis - 云爬虫初探

Python操作Redis - 云爬虫初探

原创
作者头像
钟志远
修改2017-06-19 19:12:46
2.2K0
修改2017-06-19 19:12:46
举报
文章被收录于专栏:钟志远的专栏钟志远的专栏

云存储Redis(Cloud Redis Store)是腾讯云打造的兼容Redis协议的缓存和存储服务,提供主从版和集群版。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。

购买请注意:
[1488808732163_4755_1488808733957.png]
[1488808732163_4755_1488808733957.png]
由于不同云产品之间的内网不互通,请一定购买与你之前的云服务器在相同地区的云存储Redis,否则会无法访问。

当你使用Python写分布式爬虫的时候就需要使用Redis了,今天这篇文章就让我们走进分布式爬虫的世界。

第一步你可以先在 https://www.qcloud.com/product/crs 页面购买云存储Redis,可以继续使用之前的实名认证的优惠券;如果你是学生你可以进行学生认证,会有更多优惠。

购买完成之后访问:https://console.qcloud.com/redis 页面,在此页面需要自己配置初始化密码。如下图,第一条为刚购买未初始化密码的,只需要点击初始化密码并设计密码即可,第二条为已经初始化完成的。现在我们就可以通过IP,以及你刚刚设置的密码进行访问了。同时请记住你的实例的内网地址,这就是你下面连接此实例时候使用的IP,这里我的第二条已经初始化好的实例的地址端口是:10.66.161.215:6379

[1488806207449_8039_1488806209532.png]
[1488806207449_8039_1488806209532.png]

因为我们需要做爬虫,需要使用Python操作Redis,需要我们自己去了解其中的原理吗?不需要,Python中有这样的一个库:redis,只需要在我们之前配置好的腾讯云服务器上执行命令:pip install redis

[1488806551610_4650_1488806554266.png]
[1488806551610_4650_1488806554266.png]

显示Successfully installed redis则表示安装成功了,下面我们先做一些测试。说一个坑:腾讯云用Python连接云存储的时候密码不是你创建该实例的时候的密码,真实的密码格式为:实例ID:你自己设置的密码

代码语言:txt
复制
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函数,第二台服务器的配置请参照前面的两篇配置文章。

[1489502135985_4982_1489502136768.png]
[1489502135985_4982_1489502136768.png]

之后你将会在你的脚本的目录下的一个pic文件夹里面看到下载的美图。

相关推荐

云服务器搭建Python环境

云服务器搭建Python爬虫环境

腾讯云主机Python3环境安装Scrapy爬虫框架过程及常见错误

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档