查了一下网上关于socket
关于dns
缓存的代码,希望提高网络请求的速度,
自己在代码中使用了以后,发现速度反倒慢了,为什么呢
下面的 100 个请求中,使用了缓存之后时间增加了 4 秒多,
10 个请求的时候,时间增加了 0.2 秒左右
# coding=utf-8
import requests
import time
import socket
_dnscache = {}
def _setDNSCache():
""" DNS 缓存 """
def _getaddrinfo(*args, **kwargs):
if args in _dnscache:
# print (str(args) + " in cache")
return _dnscache[args]
else:
# print (str(args) + " not in cache")
_dnscache[args] = temp_getaddrinfo(*args, **kwargs)
return _dnscache[args]
if not hasattr(socket, '_getaddrinfo'):
temp_getaddrinfo = socket.getaddrinfo
socket.getaddrinfo = _getaddrinfo
class TiebaSpider:
def __init__(self,tieba_name):
self.tieba_name = tieba_name
self.headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
}
def get_url_list(self):
url_temp = "https://tieba.baidu.com/f?kw=" + self.tieba_name + "&ie=utf-8&pn={}"
url_list = [url_temp.format(i*50) for i in range(100)]
return url_list
def parse_url(self,url):
print("now parsing url",url)
response = requests.get(url,headers=self.headers)
return response.content.decode()
def run(self):
url_list = self.get_url_list()
for url in url_list:
html_str = self.parse_url(url)
if __name__ == '__main__':
t1 = time.time()
_setDNSCache()
tieba_spider = TiebaSpider("李毅")
tieba_spider.run()
print(time.time()-t1)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.