当前位置: 首页 > news >正文

贵阳建立网站wordpress仿逛

贵阳建立网站,wordpress仿逛,国内免费开源crm系统大全,跨境电商网站设计一、retrying模块简介 在爬虫中,因为我们是在线爬取内容,所以可能会因为网络、服务器等原因导致报错,那么这类错误出现以后,我们想要做的肯定是在报错处进行重试操作,Python提供了一个很好的模块,能够直接帮…

一、retrying模块简介

在爬虫中,因为我们是在线爬取内容,所以可能会因为网络、服务器等原因导致报错,那么这类错误出现以后,我们想要做的肯定是在报错处进行重试操作,Python提供了一个很好的模块,能够直接帮助我们实现重试操作,它就是retrying模块。当然,重试操作不仅仅只用于爬虫,还可以用于其他更广泛的领域。

retrying 是一个用Python编写的重试库,用于将重试行为添加到常规任务中,让你写的代码拥有重试功能。官方文档:https://github.com/rholder/retrying

二、案例讲解

我这里有一些网址,现在要求编写一个爬虫程序,将这些网站访问一遍,那么应该如何确保程序能够顺利的执行完成呢,有些小伙伴会说使用异常捕获防止程序出现意外,这是一种解决办法,那么如果我再要求一个网站的请求不能等待过长时间并且针对于有错误的地址进行重试,应该如何解决呢,这个时候我们就需要引入重试机制。

(1)无重试机制的爬虫

import requestsdef requests_url(href):URL = hrefHeaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}resp = requests.get(url=URL, headers=Headers, timeout=3)if resp.status_code == 200:print(f'{href}访问成功')UrlList = ['https://www.chinanews.com/scroll-news/news5.html', 'https://ssr4.scrape.center/','https://www.chinanews.com/scroll-news/news12.html', 'https://www.chinanews.com/scroll-news/news3.html','https://www.chinanews.com/scroll-news/news8.html', 'https://www.chinanews.com/scroll-news/news2.html','https://www.chinanews.com/scroll-news/news11.html', 'https://www.chinanews.com/scroll-news/news1.html','https://www.chinanews.com/scroll-news/news4.html', 'https://www.chinanews.com/scroll-news/news7.html','https://www.chinanews.com/scroll-news/news10.html', 'https://www.chinanews.com/scroll-news/news9.html','https://www.chinanews.com/scroll-news/news6.html']
for i in UrlList:print(f'正在访问:{i}')requests_url(i)

这段代码在执行时,报了Read timed out的异常提示超时,那么超时的原因有多种,可能是本地网络原因、也可能是网址服务器原因等,此时便需要使程序具备能够重试的功能。

(2)引入了重试机制的爬虫

接下来我们导入安装好的retrying模块,只要在需要重试的函数前面添加指定的装饰器,即可使程序具备重试功能,看以下修改:

from retrying import retry@retry
def requests_url(href):URL = hrefHeaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}resp = requests.get(url=URL, headers=Headers, timeout=3)if resp.status_code == 200:print(f'{href}访问成功')

(3)重试机制修订

引入了 retrying 的代码存在一个弊端,如果这个网址本身就是联不通的,那么它会永远重试下去,这并不是我们想看到的,所以还要添加一下参数:stop_max_attempt_number(最大重试次数),可以给这个参数指定一个数字,比如下面指定的数字5,便是让其最多重试5次。

from retrying import retry@retry(stop_max_attempt_number=5)
def requests_url(href):URL = hrefHeaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}resp = requests.get(url=URL, headers=Headers, timeout=3)if resp.status_code == 200:print(f'{href}访问成功')

但是这样的修改还是不尽人意,虽然添加了最大重试次数,但非常快速的机械性的连续重试,总有一种会随时出发反爬机制的感觉,所以还可以设置两次重试之间的等待时间:wait_fixed(单位是毫秒),代码如下:

from retrying import retry@retry(stop_max_attempt_number=5, wait_fixed=2000)
def requests_url(href):URL = hrefHeaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}resp = requests.get(url=URL, headers=Headers, timeout=3)if resp.status_code == 200:print(f'{href}访问成功')

不过我还是建议重复性的操作添加点随机性比较好,将 wait_fixed 修改为 wait_random_min 和 wait_random_max,表示从指定的时间范围内随机一个等待时间。

from retrying import retry@retry(stop_max_attempt_number=5, wait_random_min=1000, wait_random_max=2000)
def requests_url(href):URL = hrefHeaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}resp = requests.get(url=URL, headers=Headers, timeout=3)if resp.status_code == 200:print(f'{href}访问成功')

三、最终代码

import requests
from retrying import retry@retry(stop_max_attempt_number=5, wait_random_min=1000, wait_random_max=2000)
def requests_url(href):URL = hrefHeaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}resp = requests.get(url=URL, headers=Headers, timeout=3)if resp.status_code == 200:print(f'{href}访问成功')UrlList = ['https://www.chinanews.com/scroll-news/news5.html', 'https://ssr4.scrape.center/','https://www.chinanews.com/scroll-news/news12.html', 'https://www.chinanews.com/scroll-news/news3.html','https://www.chinanews.com/scroll-news/news8.html', 'https://www.chinanews.com/scroll-news/news2.html','https://www.chinanews.com/scroll-news/news11.html', 'https://www.chinanews.com/scroll-news/news1.html','https://www.chinanews.com/scroll-news/news4.html', 'https://www.chinanews.com/scroll-news/news7.html','https://www.chinanews.com/scroll-news/news10.html', 'https://www.chinanews.com/scroll-news/news9.html','https://www.chinanews.com/scroll-news/news6.html']
for i in UrlList:print(f'正在访问:{i}')try:requests_url(i)except:print('重试结束,依旧报错,跳过,进行下一项任务!')

四、总结

重试机制仅仅是让爬虫在某一网站访问不通的情况下多尝试几次,最终还是会报错,所以重试机制依旧需要与异常捕获结合使用。
http://www.yayakq.cn/news/971719/

相关文章:

  • 网站建设开发方式包括wordpress商城系统
  • 部队网站建设建议单页面网站怎么做的
  • 离线推广网站规划书电脑网页无法访问如何解决
  • 轮网站开发的重要性工地建筑模板尺寸
  • 锐奇智能手机网站建设专业做网站哪家正规
  • 宜昌电子商城网站建设免费素材网站素材库
  • 做网站图片多大深圳网站开发团队
  • iis默认网站建设中室内设计效果图排版
  • 快速搭建网站的工具有哪些163企业邮箱下载
  • 美食网站的设计与制作代码无锡做设计公司网站
  • 源码快速建站源代码网站开发
  • 网站正在建设中下载设计网站界面
  • 做meta分析需注册的网站上海大型网站开发公司
  • 化隆网站建设公司公关到底做什么
  • 网站链接跳转怎么做wordpress第三方用户系统
  • 做网站有什么注意事项电子商务营销策略分析
  • 射阳做企业网站多少钱旅游网站制作方案
  • 做美容美发学校网站公司业余学做衣服上哪个网站
  • 做淘宝客如何建立网站海南网站策划
  • 网站建设提问浙江专业网站建设商城报价
  • 手机网站素材网爱站网主要功能
  • 设计师兼职网站四川宜宾今天最新消息
  • 网站模板视频教程深圳宝安网站设计公司
  • 微软手机做网站服务器移动端网站开发教程
  • 成都网站建设哪里好wordpress电脑访问
  • 网站 虚拟目录自己做电视视频网站吗
  • 网站导航固定代码全网关键词搜索工具
  • 建站宝盒是什么南通给公司做网站的
  • 汉中网站建设费用泰安百度推广代理商
  • 大连网站建设找哪家专门做衣服特卖的网站有哪些