我有以下功能可以从域的主页中提取内容。但它不适用于网站http://mywatchedmovies.com。
import requests
def fetch_url(url, timeout, max_content, headers):
r = requests.get(url, stream=True, timeout=timeout, headers=headers)
r.raise_for_status()
if int(r.headers.get('Content-Length',0)) > max_content:
raise ValueError('response too large')
content = r.raw.read(max_content+1, decode_content=True)
if len(content) > max_content:
print(url)
raise ValueError('Too large a response')
return {'url':url,'content':content,'status_code':r.status_code}
timeout = 10
max_content = 5000000
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}
fetch_url('http://mywatchedmovies.com', timeout, max_content, headers)
如果我改变函数只是获取head
,那么它会触发超时,这是好的。但是我需要这个功能才能获得非常高的性能,而不是拿起头来然后拉下主页。或者我可以在没有性能下降的情况下执行此操作吗?
答案 0 :(得分:0)
请回答我,我不是请求专家。
仅请求带有超时标志的头部必须更快,因为在服务器不响应或下载时间过长的情况下头部的大小非常小,而不是发出一个request.get()并卡在其中反应很长。 即使您将不得不请求后续的主页下载,先前的标题请求也已经过滤掉了有问题的服务器。
仅请求头部。
r = requests.head(url, timeout=1)