Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多次点击url_Python_Url - Fatal编程技术网

Python 多次点击url

Python 多次点击url,python,url,Python,Url,我想在python中多次点击URL。目前,我一直在使用webbrowser.open进行此操作,但速度非常慢,占用大量内存。还有更有效的方法吗?使用吗?作为一个标准的经验法则,总是先查看标准库,那里有很多有用的包 import urllib2 url = "http://www.google.com" n = 8 for i in range(n): urllib.urlopen( url ).read() 如果您最终想要在HTTP请求中使用任何不那么琐碎的东西,您可能希望研究一下 F

我想在python中多次点击URL。目前,我一直在使用webbrowser.open进行此操作,但速度非常慢,占用大量内存。还有更有效的方法吗?

使用吗?作为一个标准的经验法则,总是先查看标准库,那里有很多有用的包

import urllib2

url = "http://www.google.com"
n = 8

for i in range(n):
  urllib.urlopen( url ).read()
如果您最终想要在HTTP请求中使用任何不那么琐碎的东西,您可能希望研究一下


F.X.的答案几乎肯定是你想要的

但你问的是效率,如果你真的想尽可能地提高效率,你可以做得更好。越早关闭套接字,在计算机和web服务器上浪费的CPU、内存和带宽就越少

此外,如果您并行地发出多个请求,虽然这不会节省机器上的任何资源,但实际上会浪费一些资源或服务器,可能会更快地完成。这就是你想要的吗

当然,这就引出了一个问题:点击URL到底意味着什么。只发送请求并立即关闭是否可以接受?或者你至少需要等待回复电话?就这一点而言,提出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请求实际上是……如果您只需要制作一个静态的、琐碎的请求,请自己动手,但一般来说,您肯定要使用urllib、请求或其他库。

您说的是urllib,但链接到urllib2。否则,答案很好。@EnnoShioji:这不是重复的。高效地向同一url发出多个请求是另一个问题。您需要类似于curl的工具,而不仅仅是curl.related:import requests requests.geturl=some_url-在循环+1中运行它。虽然示例代码在Python2或Python3上不起作用,但请使用bytes literal发送数据,并说明futures是Python2上的第三方
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))