1、execute_tasks.py # 读取任务队列存储进redis
import requests
import re
from lxml import etree
from aqicn import crawldef get_cities():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'}content = requests.get('http://aqicn.org/city/all/cn/',headers=headers)response = content.content.decode('utf-8')hongkong = re.compile(r'id=\'香港\'></a>(.*)<a id=\'蒙古\'></a>',re.S)taiwan = re.compile(r'id=\'台湾\'></a>(.*)<a id=\'新加坡\'></a>',re.S)land = re.compile(r'id=\'中国\'></a>(.*)<a id=\'越南\'></a>',re.S)hongkong = hongkong.findall(response)[0]hongkong = etree.HTML(hongkong)taiwan = taiwan.findall(response)[0]taiwan = etree.HTML(taiwan)land = land.findall(response)[0]land = etree.HTML(land)city_list = land.xpath('//a') + hongkong.xpath('//a') + taiwan.xpath('//a')for i in city_list:try:url = i.xpath('.//@href')[0]name = i.xpath('.//text()')[0].strip()if name:yield {'url':url,'city':name}except Exception as e:print(e)def task_manager():for data in get_cities():crawl.delay(data)if __name__ == '__main__':task_manager()

2、aqicn.py # 读取队列进行任务解析并存储

import requests
from lxml import etree
from celery import Celery# 这里定义了broker和backend
# 注意IP和后面的数字都是可以调整的
app = Celery('aqicn', broker='redis://192.168.4.53:6379/1', backend='redis://192.168.4.53:6379/3')# 装饰器,说明这是一个task的实现
@app.task
def crawl(data):headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Host': 'aqicn.org','Proxy-Connection': 'keep-alive','Referer': 'http://aqicn.org/city/all/cn/','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',}url = data['url']response = requests.get(url, headers=headers)html = response.content.decode('utf-8')html = etree.HTML(html)try:aqi = html.xpath('//div[@id="aqiwgtvalue"]//text()')[0] # 空气质量except:news = html.xpath('//div[@class="section-content"]/center//h3//text()')if news:aqi= ''.join(news)else:aqi = '页面加载错误'data['aqi'] = aqireturn data

3、redis_read.py # 从redis数据库中取值并删除原值,且一旦有新值传入,继续读取并删除,做到持久化,可以直接展示,或者存到mysql数据中

import redis, picklerediscli = redis.StrictRedis(host='192.168.4.53', db=3, port=6379)while True:result = rediscli.keys() # 持续从redis里拿keysfor i in result:key = i.decode('utf-8')data = rediscli.get(key)try:print(pickle.loads(data))rediscli.delete(key)except Exception as e:print(e)

转载于:https://www.cnblogs.com/hejianlong/p/10056733.html

python_celery redis的读取相关推荐

  1. 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现...

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x0n 前言简述 知识引入 Lua模块指令阶段 0x01 部署环境 安装说明 安 ...

  2. 记一次Redis scard读取数据结果不对的问题【DaemonCoder】

    今天在用Redis时遇到一个奇怪的问题,虽然很快就定位到了问题,但是在开发时确实忽略了,还是意识不到位,这里记录一下问题的来龙去脉让自己铭记. 背景 首先介绍一下背景,在一个类似抢票的项目中,其中有一 ...

  3. redis排查读取超时、连接超时

    最近公司现网查询速度极慢,原因是因为有一个调度频繁查询产品详情,经理安排进行优化 笔者第一时间想到的是使用缓存,但因为生产环境产品信息量将近上千条热点数据,为防止撑爆服务器内存,考虑到了使用redis ...

  4. php redis 批量读取,PHP redis 批量操作

    标签: 参考网站 phpredis扩展 :https://github.com/phpredis/phpredis#pconnect-popen 命令参考:http://doc.redisfans.c ...

  5. Redis数据读取(缓存击穿,穿透,雪崩)

    内容文件参考"付费专栏"可领取.专栏购买者提供本内容"永久答疑和远程协助"服务.一诺千金! N.1 缓存处理流程 1)前台请求,后台先从缓存中取数据,取到直接返 ...

  6. redis 2m数据读取_Flink读写Redis(二)读取redis数据

    自定义flink的RedisSource,实现从redis中读取数据,借鉴了flink-connector-redis_2.11的实现思路,对redis读取操作进行封装,其中flink-connect ...

  7. 封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>

    封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>(使用lettuce连接池) 代码环境 框架:springb ...

  8. python如何读取数据时出现错误_在python3中,关于redis读取数据带有‘b’的问题...

    在python3中,关于redis读取数据带有'b'的问题 #encoding=utf-8 from redis import * #读取数据 d1=input("您输入的数据是:" ...

  9. Redis安装与调试

     Redis安装与调试 Redis安装与调试linux版本:64位CentOS 6.5 Redis版本:2.8.17  (更新到2014年10月31日) Redis官网:http://redis. ...

最新文章

  1. 通过mtd读写flash_关于如何在kernel起来之后通过直接dd读写nand flash分区来更新zImage的mtd问题...
  2. 华为 S5700S-28P-LI Console连接电脑
  3. 报名 | 清华大学海外学者短期讲学:数字经济创新创业课程
  4. LeetCode Combination Sum IV(动态规划)
  5. 用Python分析了20万场吃鸡数据,有不少有趣的发现
  6. 百度、华为、京东、B站最新面试题汇集,实战篇
  7. 英语作文谈谈你对计算机的看法,英语作文:谈谈你对网络语言的看法
  8. 组态王能直接读取仪表数据吗_液晶多功能网络电力仪表PD800H
  9. 统计个人已完成的工作量_2020个人年终工作总结怎么写已完成工作?
  10. java Spring beans
  11. 项目管理办公室 PMO
  12. 【链表】牛客网:链表内指定区间反转
  13. 语言 全排列 函数_【排列组合】错位全排列的简化计算公式
  14. Metatable让我从心认知了Lua(相知篇)
  15. kindle阅读mobi电子书资料共享
  16. gpio_desc()的分析
  17. java 利用Future做超时任务处理
  18. SparkEnv源码解读
  19. 最新!CCF-A类顶会WWW2020最佳论文出炉!OSU最佳论文
  20. 尚医通 (二十)就诊人用户管理 | 平台用户管理

热门文章

  1. Android开发学习笔记(十一)点九图
  2. java 操作 User32 的一次小尝试
  3. 适合Vue用户的React教程,你值得拥有
  4. 中国商业地产投资专业展览会6月在京举办
  5. 【Python】逆向爬虫-----模拟试客联盟登录(RSA)
  6. English Grammar-奋斗的开始-状语从句 (一)
  7. vue+vue-amap
  8. Oracle 字符串拼接
  9. 超好用的树莓派系统盘制作工具
  10. 删除数组中的某个元素-JAVA