Python操作Redis - 云爬虫初探

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

购买请注意:
由于不同云产品之间的内网不互通,请一定购买与你之前的云服务器在相同地区的云存储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文件夹里面看到下载的美图。

相关推荐

云服务器搭建Python环境

云服务器搭建Python爬虫环境

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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏姚姝娜的专栏

关于 Git 的那些事

本篇文章主要讲了下 Git 的一些基本的概念以及如果使用 git log 的命令来进行一段时间段的代码量统计,其中还可以统计不同作者修改的代码量,其中关于 gi...

50910
来自专栏运维技术迷

crontab命令详解

一. Crontab 介绍 1、crontab命令的功能是在一定的时间间隔调度一些命令的执行,我理解为windows下的任务计划。 2、/etc/cronta...

38050
来自专栏Laoqi's Linux运维专列

Nginx+Tomcat实现Web服务器的负载均衡

51860
来自专栏流柯技术学院

loadrunner录制回放常见问题及解决办法

1.录制错误     1)录制本机 WebTours 或录制本地网站无法打开     当 使 用 Vista 以 后 的 操 作 系 统 时 , 会 出 现 该...

31720
来自专栏鸿的学习笔记

不一样的日志

这里提的日志并不是应用程序产生的日志,应用程序产生的日志是以一种人类读得懂的方式展示程序运行信息的记录方式,本身不包含任何数据,这篇文章所要描述的日志指的数据系...

11550
来自专栏乐沙弥的世界

Percona XtraDB Cluster集群线程模型

Percona XtraDB集群创建一组线程来为其操作提供服务,这些线程与现有的MySQL线程无关。有三个主要线程组:

9200
来自专栏逻辑熊猫带你玩Python

Python | “简易清单(EasyBill)增强版”

前情提要:关于本软件的前生今世可以查看笔者的历史文章《Python | “一个简单的清单软件easybill”》

39820
来自专栏闵开慧

hadoop图解

gateway机器是跳板机,提交job到云梯的,在gateway机器上只要配置hadoop-site.xml即可,配置文件中主要是指定jobtracker的地...

415100
来自专栏大数据智能实战

HBase启动过于缓慢的原因及其优化策略

当HBASE导入了几十亿的数据记录时,某一天重启一下HBASE,发现启动过于缓慢,一直在提示PleaseHoldException:Master is init...

25690
来自专栏TARS GO

TarsGo新版本发布,支持protobuf,zipkin和自定义插件

Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架,目前支持C++、Java、PHP、Nodejs、Golang语言。该框架为用户提供了涉及到...

35360

扫码关注云+社区

领取腾讯云代金券