def request(self, url, method, data, retry=5): resp = None while retry: retry = retry - 1 try: if method == 'GET': resp = self._sess.get(url=url, params=data, headers=self._headers, timeout=5) # 发送Get请求 elif method == 'POST': resp = self._sess.post(url=url, json=data, headers=self._headers, timeout=5) # 发送Post请求 else: raise ValueError('method参数有误') if resp.status_code == 200 and resp.content: # 若得到正常请求,则返回请求体信息 resp.encoding = 'utf-8' return resp.text except Exception as e: print('请求 {} 失败,正在尝试重新请求...'.format(url)) print(e) time.sleep(3 + random.randint(1, 10) * 0.1) # 延迟一定秒数,爬取太快容易请求失败 return ''
时间: 2024-03-31 21:32:54 浏览: 177
这段代码是该类的一个方法,用于向指定的URL发送HTTP请求,参数url表示请求的URL地址,参数method表示请求的方法(GET或POST),参数data表示请求的参数,参数retry表示请求失败后的重试次数(默认为5)。方法内部使用requests模块中的Session对象(即self._sess)发送HTTP请求,根据method参数的不同,使用get或post方法发送请求。其中,headers参数使用了上文提到的_user_agent属性作为请求头部信息。如果请求成功(状态码为200),则将响应体中的文本数据作为函数返回值。如果请求失败,则会在控制台输出错误信息,并在3秒到4秒之间的随机时间之后进行重试,最多重试retry次。如果所有重试都失败,则返回空字符串。
相关问题
# 下载图片,当请求失败时尝试重新请求,次数为retry def download(self, url, path, retry=5): resp = None while retry: retry = retry - 1 try: resp = self._sess.get(url=url, headers=self._headers) # 发送Get请求 if resp.status_code == 200 and resp.content: # 若得到正常请求,则返回请求体信息 with open(path, 'wb') as f: f.write(resp.content) except Exception as e: print('下载 {} 失败,正在尝试重新下载...'.format(url)) print(e) # time.sleep(random.randint(1, 10) * 0.1) # 延迟一定秒数,爬取太快容易请求失败
这段代码是该类的一个方法,用于下载指定URL的图片,参数url表示图片的URL地址,参数path表示图片保存的本地路径,参数retry表示下载失败后的重试次数(默认为5)。方法内部使用requests模块中的Session对象(即self._sess)发送HTTP请求,使用get方法获取图片的二进制数据。如果请求成功(状态码为200),则将响应体中的二进制数据写入到指定路径的文件中。如果请求失败,则会在控制台输出错误信息,并在3秒到4秒之间的随机时间之后进行重试,最多重试retry次。注意,在下载图片时不应该使用json或params等参数,因为图片通常不需要传递参数。因此,这里只传递了headers参数,使用了上文提到的_user_agent属性作为请求头部信息。
阅读全文