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 条评论
登录 后参与评论

相关文章

来自专栏运维技术迷

crontab命令详解

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

3405
来自专栏姚姝娜的专栏

关于 Git 的那些事

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

4471
来自专栏java相关

Redis学习笔记01---配置文件

1224
来自专栏ionic3+

【开发指南】(一)Ionic3开发环境配置常规ionic的环境搭建如下:

工欲善其事,必先利其器,搭好环境是开发的前提,有时环境没弄好,不时报错往往很扎心。

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

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

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

1252
来自专栏Ryan Miao

resin4的初次配置与使用

之前用的resin3,结果发布新项目老师文件冲突,我也找不到是哪里有问题,于是尝试使用resin4. 首先从官网下载最新resin4。 然后放到opt下,tar...

36011
来自专栏IT笔记

Tomcat优化之配置线程池

简介 线程池作为提高程序处理数据能力的一种方案,应用非常广泛。大量的服务器都或多或少的使用到了线程池技术,不管是用Java还是C++实现,线程池都有如下的特点:...

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

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

4686
来自专栏贺贺的前端工程师之路

Angular2 之 时间的教训 & 错误

下面开始,时间的教训的记录,如果同样的错误我犯过不是第一次,那么我也会记录下来,我到时要看看,自己是不是会在同一个地方摔倒N次?

704
来自专栏python3

python爬虫--调用百度翻译进行文本翻译

点网络,会发现很多GET,POST请求,右边消息头那里会有很多信息:请求地址、请求方法、远程地址、状态码、server、等等之类的信息

1251

扫码关注云+社区