美文网首页大数据 爬虫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