我想在python中多次点击一个URL。目前我一直使用webbrowser.open()
执行此操作,但它非常慢并且消耗大量内存。任何更有效的方法?
答案 0 :(得分:4)
import urllib2
for _ in range(10):
urllib2.urlopen("http://www.stackoverflow.com")
答案 1 :(得分:3)
F.X.的回答几乎可以肯定你想要的。
但是你询问了效率,如果你真的希望尽可能高效,你可以做得更好。关闭套接字越快,在计算机和Web服务器上浪费的CPU,内存和带宽就越少。
此外,如果你并行发出多个请求,虽然这不会节省你机器上的任何资源(它实际上会浪费一些)或服务器,但它可能会更快完成。这就是你要追求的吗?
当然,这引发了一个问题,即“点击网址”究竟是什么意思。发送请求并立即关闭是否可以接受?或者您是否需要至少等待响应行?就此而言,提出HEAD
请求而不是GET
是否可以接受?你需要现实/有用的标题吗?
无论如何,为了做到这一点,你想要降到更低的水平。大多数高级库都没有给你任何方法,比如在阅读之前关闭套接字。但是制作HTTP请求并不难。*
例如:
from contextlib import closing
from socket import create_connection
from concurrent.futures import ThreadPoolExecutor, wait
host, port = 'www.example.com', 80
path = '/path/to/resource.html'
def spam_it():
with closing(create_connection((host, port))) as sock:
sock.sendall('GET {} HTTP/1.0\n\n'.format(path))
with ThreadPoolExecutor(max_workers=16) as executor:
wait(executor.submit(spam_it) for _ in range(10000))
*嗯,手动制作HTTP请求实际上是quite involved ...如果你只需要制作一个静态的,无关紧要的,请自己动手,但总的来说,肯定是想要使用urllib
,requests
或其他一些图书馆。
答案 2 :(得分:2)
使用urllib2?作为一个标准的经验法则,首先要在标准库中查找,那里有大量有用的包。
答案 3 :(得分:1)
import urllib2
url = "http://www.google.com"
n = 8
for i in range(n):
urllib.urlopen( url ).read()
如果您最终想要对HTTP请求不那么简单,那么您可能希望查看requests
module。