博主在阅读崔庆才著的《Python3网络爬虫实战》时,深深被其爬虫的高超技术所吸引。当阅读到代理池部分的时候,在代码实践时遇到的一些问题:

AttributeError: 'int' object has no attribute 'item

笔者百思不得其解,终于在经过http://www.pianshen.com/article/3497197559/的启发之后发现了问题的本源。

ZADD的帮助文档如下:

class Redis(object)  def zadd(self, name, mapping, nx=False, xx=False, ch=False, incr=False)
Inferred type: (self: Redis, name: Any, mapping: {__len__, items, iteritems}, nx: bool, xx: bool, ch: bool, incr: bool) -> Any
Set any number of element-name, score pairs to the key name. Pairs are specified as a dict of element-names keys to score values.nx forces ZADD to only create new elements and not to update scores for elements that already exist.xx forces ZADD to only update scores of elements that already exist. New elements will not be added.ch modifies the return value to be the numbers of elements changed. Changed elements include new elements that were added and elements whose scores changed.incr modifies ZADD to behave like ZINCRBY. In this mode only a single element/score pair can be specified and the score is the amount the existing score will be incremented by. When using this mode the return value of ZADD will be the new score of the element.The return value of ZADD varies based on the mode specified. With no options, ZADD returns the number of new elements added to the sorted set.

可以看到ZADD函数的第三个参数为Mapping类型,而非单独的proxy与score。笔者猜测,可能由于Redis库版本问题而产生了代码不兼容的问题。

解决方法如下:

  • 将db.py文件中add、decrease、max函数进行如下修改(主要为增加mapping参数与去除无用return,并应用ZADD函数替换ZINCRBY函数):
    def add(self, proxy, score=INITIAL_SCORE):"""添加代理,设置分数为最高:param proxy: 代理:param score: 分数:return: 添加结果"""if not re.match('\d+\.\d+\.\d+\.\d+\:\d+', proxy):print('代理不符合规范', proxy, '丢弃')returnif not self.db.zscore(REDIS_KEY, proxy):mapping={proxy:score,}return self.db.zadd(REDIS_KEY, mapping)def decrease(self, proxy):"""代理值减一分,小于最小值则删除:param proxy: 代理:return: 修改后的代理分数"""score = self.db.zscore(REDIS_KEY, proxy)if score and score > MIN_SCORE:print('代理', proxy, '当前分数', score, '减1,变为',score -1)score = score -1mapping={proxy:score,}self.db.zadd(REDIS_KEY,mapping)else:print('代理', proxy, '当前分数', score, '移除')self.db.zrem(REDIS_KEY, proxy)def max(self, proxy):"""将代理设置为MAX_SCORE:param proxy: 代理:return: 设置结果"""print('代理', proxy, '可用,设置为', MAX_SCORE)mapping = {proxy:MAX_SCORE,}self.db.zadd(REDIS_KEY, mapping)

关于更多Redis函数的具体操作与参数说明,建议阅读:http://redisdoc.com/sorted_set/zadd.html

Python3网络爬虫开发实战(崔庆才)笔记——ProxyPool的代码问题:AttributeError: 'int' object has no attribute 'item及相关问题的处理相关推荐

  1. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...

  2. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(3):抓取猫眼电影榜单TOP100电影,并存入Excel表格

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,如果你也要这套视频教程的话,关注我公众号[小众技术],关注后回复[PYTHON],无套路免费送你一个学习大 ...

  3. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(4):解析库Xpath的使用方法总结

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,如果你也要这套视频教程的话,关注我公众号[小众技术],关注后回复[PYTHON],无套路免费送你一个学习大 ...

  4. python3网络爬虫开发实战pdf 崔庆才 百度网盘分享

    python3网络爬虫开发实战pdf 崔庆才 百度网盘分享 介绍了如何利用Python 3开发网络爬虫,环境配置和基础知识,然后讨论了urllib.requests.正则表达式.Beautiful S ...

  5. 《python3网络爬虫开发实战》 ————崔庆才

    今天才发现<python3网络爬虫开发实战>这本书很久之前已经被崔神放到自己的个人网站上免费阅读了,下面贴一下链接https://cuiqingcai.com/5052.html 这本书讲 ...

  6. 【崔庆才教材】《Python3网络爬虫开发实战》3.4爬取猫眼电影排行代码更正(绕过美团验证码)

    前情提要 最近有七八个小伙伴私信问我说崔大神的<Python3网络爬虫开发实战>教材中 "3.4爬取猫眼电影排行" 一节的代码目前不能用. 首先附上崔大神的github ...

  7. [Python3网络爬虫开发实战] 7-动态渲染页面爬取-4-使用Selenium爬取淘宝商品

    在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可 ...

  8. 【Python3网络爬虫开发实战】3-基本库的使用 1.2-处理异常

    前一节我们了解了请求的发送过程,但是在网络不好的情况下,如果出现了异常,该怎么办呢?这时如果不处理这些异常,程序很可能因报错而终止运行,所以异常处理还是十分有必要的. urllib的error模块定义 ...

  9. 《Python3网络爬虫开发实战(第二版)》上市了!!!!

    " 阅读本文大概需要 5 分钟. " 告诉大家一个好消息:我的好朋友崔庆才老师的<Python3网络爬虫开发实战(第二版)>现在正式上市了!!!! 没错,就是这本: 就 ...

最新文章

  1. python算法书pdf_Python算法很难吗?python神书《算法图解》PDF电子版分享给你!
  2. 微生物组-宏基因组分析第8期(报名直播课免费参加线下2020.7)
  3. 13名专家盘点2017最重要AI事件,预测AGI将取代AI
  4. 黑马程序员_Java解析网络数据流的三种特殊方法
  5. 6.Java中的变量(定义)和数据类型(划分)
  6. 线程Blocked--SynchronizedDemo
  7. 高级精致智能快捷的Web设计原则案例
  8. 经典面试题(45):以下代码将输出的结果是什么?
  9. Python将时长转换为MM:SS格式
  10. 大于号小于号_一年级数学上册20以内填大于号小于号专项练习1000题!【有电子版】...
  11. 基于参考点的非支配遗传算法-NSGA-III(二)
  12. RabbitMQ的基本概念
  13. CMOS摄像头驱动分析笔记1
  14. php 每七天执行代码,十天学会PHP之第七天
  15. 小米路由php5.6,MT7621超频1100Mhz,带小米路由器3G/小米AC2100/红米AC2100固件下载
  16. tiff文件读写等操作(多帧tiff图像保存成的.tif文件)
  17. 过年啦!什么是你的春节专属年味儿?
  18. oracle fnd global,Oracle EBS R12 - 利用fnd_conc_global.set_req_globals设置子请求的Parent Request ID...
  19. Mysql定义DELETE操作触发器,将删除数据存入历史表
  20. 利用beef盗取浏览器cookie,并实现页面跳转

热门文章

  1. docker(三)——cpu/内存/磁盘资源控制
  2. 华硕路由ax86u 梅林_“亮眼”功能体验!华硕新品路由RT-AX86U评测
  3. php泥浆配比,钻孔灌注桩泥浆调配技术要点
  4. 日本公路管理的基本模式
  5. java 解压zip文件
  6. [Unity学习笔记]2D游戏中的触碰/OnMouseDown
  7. 【RFID】OctaneSDKJava Eclipse报错Error occurred during initialization of boot layer
  8. python和django的目录遍历漏洞(任意文件读取)
  9. 基于Requests与mitmproxy打造迷你接口测试框架
  10. Python range() 参数 详解 用法