创建小型应用程序网络爬虫:即时编写此代码:
def isGood(URL):
try:
cURL = URL + text.patch
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
sock.connect((URL, 80))
header = "GET %s HTTP/1.1\r\n" % text.patch
header += "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36\r\n"
header += "Accept: */*\r\n"
header += "Host: %s\r\n\r\n" % URL
sock.send(header)
data = sock.recv(1024)
html = ""
for x in range(10):
html = html + data
data = sock.recv(1024)
if len(data) == 0:
break
sock.close()
if str(text.keyword) in html:
print '+ ' + cURL
logfile = open(text.output, 'a')
logfile.write('%s\n' % (cURL))
logfile.close()
list_good.append(cURL)
except:
pass
代码正常工作,bat si非常慢,连接后需要关闭而socket不关闭等待时间,怎么能加快这个?我在多线程中使用!
答案 0 :(得分:1)
请不要再尝试编写自己的HTTP堆栈,因为现有的堆栈太慢了。您的代码中只有一些错误:
所以帮自己一个忙,不要重新发明轮子。 但是如果你仍然愿意自己做,并试图比现有的库更好(这可能是可能的,虽然不是更好)我建议你彻底研究HTTP的规范,例如至少RFC2616。然后让我们看看你是否能够更好更快地做到这一点,因为通常:那些不理解XXX的人会被谴责重新发明它,很糟糕。