【Download error:TOO MANY REQUESTS】【TypeError:excepted string or buffer】
《用python写网络爬虫》,1.4.4链接爬虫,运行时,遇到错误:
Download error:TOO MANY REQUESTS
Traceback(most recent call last):
File "1.py",line 52,in(module)
link_crawler('http://example.webscraping.com','/index')
File "1.py",line 34,in link_crawler
for link in get_links(html):
File "1.py",line 50,in get_links
return webpage_regex.findall(html)
TypeError:excepted string or buffer
分析:首先定位到异常位置,再设置每次请求发送后的等待时间,可解决一次性向服务器发太多请求!
下图是原代码(即出错的代码)
1 # encoding: UTF-8 2 import re 3 import urlparse 4 import urllib2 5 6 def download(url,user_agent='wswp',num_retries=2): 7 print 'Downloading:',url 8 headers = {'User-agent':user_agent} 9 request = urllib2.Request(url,headers=headers) 10 try: 11 html = urllib2.urlopen(url).read() 12 except urllib2.URLError as e: 13 print 'Download error:',e.reason # 输出错误原因 14 html = None 15 if num_retries > 0: 16 if hasattr(e,'code')and 500 <= e.code <600: 17 # 当错误提示中包含错误代码而且代码是500~600之间的数字时,执行下列代码 18 return download(url,num_retries-1) 19 return html 20 21 def link_crawler(seed_url,link_regex): 22 crawl_queue = [seed_url] 23 # set函数用于输出不带重复内容的列表(列表中的重复内容会被删掉) 24 seen = set(crawl_queue) # 访问过得链接 25 while crawl_queue: 26 url = crawl_queue.pop() 27 html = download(url) 28 for link in get_links(html): 29 if re.search(link_regex,link): # 判断link是否符合给定的正则表达式 30 link = urlparse.urljoin(seed_url,link) 31 if link not in seen: # 判断此链接是否在已访问链接列表中 32 seen.add(link) 33 crawl_queue.append(link) 34 def get_links(html): 35 webpage_regex = re.compile(r'<a[^>]+href=["\'](.*?)["\']',re.IGNORECASE) #匹配<a href="xxx"> 这样的字符串 36 return webpage_regex.findall(html) 37 38 link_crawler('http://example.webscraping.com','/index')
在出错位置加上等待时间(红色标明),如下:
def link_crawler(seed_url,link_regex):crawl_queue = [seed_url]# set函数用于输出不带重复内容的列表(列表中的重复内容会被删掉) seen = set(crawl_queue) # 访问过得链接 while crawl_queue:url = crawl_queue.pop() html = download(url)for link in get_links(html): time.sleep(0.01) #防止同时请求过多,造成服务器报错if re.search(link_regex,link): # 判断link是否符合给定的正则表达式link = urlparse.urljoin(seed_url,link) # 将相对url地址改为绝对url地址if link not in seen: # 判断此链接是否在已访问链接列表中 seen.add(link)crawl_queue.append(link)
测试:
可正常下载
若提示报错中断,则加入try…exception抛出异常进行调试。
转载于:https://www.cnblogs.com/4wheel/p/8532273.html
【Download error:TOO MANY REQUESTS】【TypeError:excepted string or buffer】相关推荐
- 第6课:学习用 requests 请求网站,并得到网站数据
本期课程目录: 什么是 requests: 如何安装 requests: Requests 库的使用: 那么我们怎么使用 requests 来模拟浏览器,去请求网站呢? requests.get() ...
- 【转】nginx提示:500 Internal Server Error错误的解决方法
[转]nginx提示:500 Internal Server Error错误的解决方法 参考文章: (1)[转]nginx提示:500 Internal Server Error错误的解决方法 (2) ...
- 相对舒适的爬虫入门系列(一):手快尝鲜【requests库】
一.实现爬虫命令的交互前,总是要经过环境配置的 (虽然不同系统操作层面上会有不同,本文主要讲方向性内容(配置环境)+一些具体实操代码上手,要问咱也先说咱的环境是win10哈) 1.请直接下载安装Ana ...
- 【解决思路】Spring Boot:Error creating bean with name ‘xxxDao‘
[解决思路]Spring Boot:Error creating bean with name 'xxxDao' 问题重现 运行Spring Boot 项目是报错:Failed to load App ...
- 【IAR Error】IAR MSP430编译报错:error
关于转载的说明:原文内容可能会不断更新,要想得到最新的内容请跳到到原文看. 无编号警告类型: 1.Sat Jun 23, 2012 17:41:05: The stack pointer for st ...
- 浪漫的html表白源代码_Love:程序猿的方式【情人节amp;520—我爱你】动画加音效 → 那些年最浪漫的表白(帮你得到你的她)...
Love:程序猿的方式~[情人节&520-我爱你]~动画加音效 → 那些年最浪漫的表白(帮你得到你的她) 导读 本文章代码的实现,主要参考GitHub(wuxia2001和hackerzhou ...
- Love:程序猿的方式~【情人节520—我爱你】~动画加音效 → 那些年最浪漫的表白(帮你得到你的她)
Love:程序猿的方式~[情人节&520-我爱你]~动画加音效 → 那些年最浪漫的表白(帮你得到你的她) 导读 本文章代码的实现,主要参考GitHub(wuxia2001和hac ...
- 【Fabric】简单测试:链码单元测试+fabric-go-sdk
纯粹记录一下,也不知道干了啥~ 链码单元测试 在Ubuntu中安装VScode 下载安装包 打开Ubuntu的火狐,访问网址:https://code.visualstudio.com/docs=&g ...
- 树莓派学习::qt5.10.1交叉编译【带opengl ES2】到非官方64位系统
qt5.10.1交叉编译[带opengl ES2](armv8 64位) 本次交叉编译是树莓派学习::qt5交叉编译(armv8 64位).的升级版,这次编译带opengl Es2的qt,原因是为了可 ...
- 树莓派学习::qt5.10.1交叉编译【带opengl ES2】到官方Raspbian Stretch
qt5.10.1交叉编译[带opengl ES2]到官方Raspbian Stretch 本次更新是树莓派学习::qt5.10.1交叉编译[带opengl ES2](armv8 64位)的延续,这次编 ...
最新文章
- 为什么我害怕数据结构学得好的程序员?
- scanner怎样回到文件开头_Radare2逆向分析dex/so/二进制等文件的使用方法
- Java多线程编程核心技术-多线程基础使用
- MEF董事、中国电信云计算中心主任赵慧玲:MEF第三类网络
- 疫中行,程序员可在家免费学这些!
- 如何避免_如何避免钢板弹簧受损
- 虚幻开发工具包发布版本的版本信息
- 华为ME909s-821模块电信卡发短信问题
- 使用ajax报405错误
- Python ln_LN型芯型联轴器
- InnoSetup打包自动签名
- 智能运维 VS 传统运维|AIOps服务管理解决方案全面梳理
- 斜杠'/' 和反斜杠'\'
- 如何关闭电脑自动更新?
- CSS经常会用到的属性
- 【洛谷P4084】Barn Painting【树形DP】
- 2020年卫星行业研究报告
- 安装PLC报错“bitte fuhren sie einen neustare neustart aus, bevor sie weitere programme installieren.veuil
- NLP指南 Your Guide to Natural Language Processing (NLP)
- html视频怎么编辑倍速,浏览器flash/html5视频播放如何倍速(Enounce MySpeed)
热门文章
- Vue人资中台--打包上线
- 文件格式的幻数File Format and Magic Number
- JAVAWEB开发Myeclipse 项目中报“无法解析类型 java.io.ObjectInputStream,从必需的 .class 文件间接引用了它”解决办法
- FPGA学习.7——DDS信号发生器
- android switch背景图片,修改SwitchCompat的背景图片
- 学习PPT好帖子 分享之
- jetbrains验证服务器,搭建个人jetbrains授权服务器
- foobox 3.8(foobar2000 CUI配置)
- Python 统计分析--单因素方差分析
- 论文参考文献正确插入方法 (一)