Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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/4/macos/8.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 大请求问题:GET未释放/重置TCP连接,循环崩溃_Python_Tcp_Httprequest_Urllib2_Python Requests - Fatal编程技术网

Python 大请求问题:GET未释放/重置TCP连接,循环崩溃

Python 大请求问题:GET未释放/重置TCP连接,循环崩溃,python,tcp,httprequest,urllib2,python-requests,Python,Tcp,Httprequest,Urllib2,Python Requests,im使用python3.3和请求模块从任意网页中刮取链接。我的程序的工作原理如下:我有一个url列表,在开始时只有起始url。 程序在该列表上循环,并将URL提供给一个过程GetLinks,在该过程中,im使用requests.get和Beautifulsoup提取所有链接。在该过程将链接附加到my urllist之前,它会将链接提供给另一个过程testLinks,以查看它是内部链接、外部链接还是断开的链接。在testLinks中,im使用requests.get来处理重定向等 到目前为止,这个

im使用python3.3和请求模块从任意网页中刮取链接。我的程序的工作原理如下:我有一个url列表,在开始时只有起始url。 程序在该列表上循环,并将URL提供给一个过程GetLinks,在该过程中,im使用requests.get和Beautifulsoup提取所有链接。在该过程将链接附加到my urllist之前,它会将链接提供给另一个过程testLinks,以查看它是内部链接、外部链接还是断开的链接。在testLinks中,im使用requests.get来处理重定向等

到目前为止,这个程序运行得非常好,我在相当多的网站上进行了测试,能够获得2000个站点等的所有页面链接。但是昨天,通过查看卡巴斯基网络监视器,我在一个页面上遇到了一个问题。在这个页面上,一些TCP连接没有重置,在我看来,在这种情况下,我的第一个url的初始请求没有重置,连接时间与我的程序运行的时间一样长

好的,到目前为止。我的第一次尝试是在testLinks过程中使用requests.head而不是.get。然后一切都很好!根据需要释放连接。但问题是,我从requests.head获得的信息不够,我无法看到重定向的url以及发生了多少重定向。 然后我试着用头

allow_redirects=True
但不幸的是,这不是一个真正的。头请求,这是一个普通的。获取请求。所以我也有同样的问题。我还尝试使用设置参数

keep_alive=False
但它也不起作用。我甚至尝试在testLinks中使用urllib.requesturl.geturl来解决重定向问题,但在这里同样的问题也发生了,TCP连接没有被重置。 我尽了很大努力来避免这个问题,我使用了请求会话,但它也有同样的问题。我还尝试了一个带有标题信息连接的request.post:close,但它不起作用

我分析了一些链接,我认为它被击中了,到目前为止,我相信它与301->302这样的重定向有关。但我真的不确定,因为在我测试过的所有其他网站上都有这样的重定向,它们很常见

我希望有人能帮助我。对于信息,im使用VPN连接可以查看所有网站,因为im所在的国家现在阻止了一些页面,这对我来说很有趣。当然,我在没有VPN的情况下测试了它,我也遇到了同样的问题

也许有一个解决办法,因为testLinks中的request.head就足够了,如果我能够在重定向的情况下看到芬兰的url,也许还有重定向的数量

如果文本可读性不好,我将提供我的代码方案


非常感谢

你正在用尽你的文件描述符吗?如果不是,我的第一个猜测是请求的连接池使它们保持打开状态,以避免重新建立它们。您使用的是Requests.Session吗?尝试先创建会话,然后使用此会话的get方法。这应该可以重复使用连接。谢谢你们的回答。会话也不起作用。Yes请求保持所有连接打开以重用它们,但就在您使用get方法时,head会关闭它们。我能够解决urllib2的问题,打开一个fileobject,然后关闭它……为什么你认为打开的连接是个问题?你是否正确地研究和处理了你的连接?我尝试了不同的保持活动设置,但没有改变任何东西。当然,我阅读了所有可能的数据,看看它是否有影响,但没有。我想使用我的脚本并行例如,我可以刮20个网站在同一时间。这就是为什么我担心tcp连接的数量。