美文网首页大数据 爬虫Python AI SqlPython3自学 爬虫实战爬虫
爬虫:requests 爬取时三次重试,以增加健壮性

爬虫:requests 爬取时三次重试,以增加健壮性

作者: dex0423 | 来源:发表于2020-04-22 21:58 被阅读0次

1. 需求:

  • 在使用 requests 爬取网页时,如果访问失败则进行多次重试,以增加爬虫的健壮性;

2. 实现:

import requests
improt time
import etree
import json

def request_url(url, request_type, result_type, post_data=None):
    '''
    向目标 url 发送 gert 或 post 请求,以获取网页的response
    :params url: 目标 url 地址
    :params request_type: 请求类型,post 或 get
    :params result_type: 结果类型,html 或 text
    :params post_data: 如果请求为 post 类型时,需要提交 post data 参数
    :return: result, 默认为 None
    '''
    header = {
        'User-Agent': 'user agent'     
    }
    i = 0
    while i < 3:
        time.sleep(10)   # 如果请求失败,则等待十秒再次请求
        try:
            if reqyest_type == 'get':    # 请求类型为 get
                response = requests.get(url=url, timeout=10, headers=header)
            else:    # 请求类型为 post
                if post_data:
                    response = requests.post(url=url, timeout=10, data=post_data, headers=header)
                else:
                    response = requests.post(url=url, timeout=10, headers=header)
              response_text = response.content.decode('utf-8', 'ignore')  # 注意网站编码方式
              if result_type == 'html':
                  result = etree.HTML(response_text )
              else:
                  result = response_text 
              if result:
                  return result
              else:
                  return None
        except:
            i += 1
              
#-----------------------------------------------------------------
# 发送 get 请求用法
#-----------------------------------------------------------------
url = 'https://www.xxx-1.com'

result_html = request_url(url=url, request_type='get', result_type='html')
if result:    
    text = result_html.xpath('/xx/xx/xx/xx/text()')    # 通过 xpath 获取目标元素
else:
    pass

#-----------------------------------------------------------------
# 发送 post 请求用法
#-----------------------------------------------------------------
url = 'http://www.xxx.com'
post_data = {
    'key_1': 'value_1',
    'key_2': 'value_2'
}
result_text = request_url(url=url, request_type='post', result_type='text', post_data=post_data)
if not result_text:
    pass

相关文章

网友评论

    本文标题:爬虫:requests 爬取时三次重试,以增加健壮性

    本文链接:https://www.haomeiwen.com/subject/plsgihtx.html