我使用worldcat python包,它使用worldcat开放REST API,并使用搜索查询和其他参数获取图书数据。基本上它是这样做的-
self.response = urllib2.urlopen(_query_url).read()
其中_query_url是由基本url和一些参数(如搜索字符串,每页记录数等)组成的url。通过使用timeit包,我发现每次调用API需要18-20秒。
然而,如果我从浏览器发出请求,它只需要3-4秒。是什么导致了python库中的延迟。这正常吗?如何在python中使API请求更快?
我的幸运猜测是使用自定义头-它们可能有某种保护或其他什么。
试题:
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0",
"Accept-Encoding": "gzip, deflate",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Connection": "keep-alive",
"Content-Type": "text/html;charset=utf-8"
}
r = urllib2.Request(_query_url, None, headers)
self.response = urllib2.urlopen(r)
无论如何,我喜欢使用python的"请求",为什么不试一试呢?简单稳定。除了一些ssl密钥问题之外,那是另一回事。