多次点击一个网址

时间:2013-09-12 08:36:38

标签: python url

我想在python中多次点击一个URL。目前我一直使用webbrowser.open()执行此操作,但它非常慢并且消耗大量内存。任何更有效的方法?

4 个答案:

答案 0 :(得分:4)

查看Urllib2.urlopen

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 ...如果你只需要制作一个静态的,无关紧要的,请自己动手,但总的来说,肯定是想要使用urllibrequests或其他一些图书馆。

答案 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