python 第三方库 requests 连接 url 报错

2015-11-10 09:45:43 +08:00
 leisurelylicht
使用的语句是
```python
page = requests.get( url , headers = self.header, timeout = 10 , verify = flag )
```
各变量的值分别为
```python
url = 'http://www.sbacn.org'
flag = False
self.header = {
'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko/20100101 Firefox/40.0',
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language' : 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding' : 'gzip, deflate',
}
```
报错内容为
```python
Traceback (most recent call last):
File "bing.py", line 237, in <module>
bing.titleGet(urls)
File "bing.py", line 195, in titleGet
page = self.dataRequest(url)
File "bing.py", line 86, in dataRequest
page = requests.get( url , headers = self.header, timeout = 10 , verify = flag )
File "/usr/lib/python2.7/site-packages/requests/api.py", line 69, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/api.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 608, in send
r.content
File "/usr/lib/python2.7/site-packages/requests/models.py", line 734, in content
self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()
File "/usr/lib/python2.7/site-packages/requests/models.py", line 657, in generate
for chunk in self.raw.stream(chunk_size, decode_content=True):
File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 326, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/response.py", line 282, in read
data = self._fp.read(amt)
File "/usr/lib64/python2.7/httplib.py", line 567, in read
s = self.fp.read(amt)
File "/usr/lib64/python2.7/socket.py", line 380, in read
data = self._sock.recv(left)
socket.error: [Errno 104] Connection reset by peer
```
我纳闷的是在我的 mac 上运行就没问题,但在服务器的 ubuntu 上运行就会报错,这是为什么?

而且我其实是抓了 bing 的搜索结果里 10 页的 url,连续访问的时候就会报错,但我要是把这个 url 单独拿出来访问的时候就没问题.这是为什么?
8474 次点击
所在节点    Python
11 条回复
dawncold
2015-11-10 09:51:14 +08:00
在哪台服务器?是 www.sbacn.org 所在的服务器?自己访问自己会不会有网络的限制?

我在北京访问没问题就是有点慢
kslr
2015-11-10 10:17:00 +08:00
连接被重置,一般不是被墙了就是对方拒绝掉你了
fei051466
2015-11-10 10:31:28 +08:00
墙的即视感
leisurelylicht
2015-11-10 10:32:01 +08:00
@dawncold 直接访问没有问题.我也是北京

@kslr 但是我这样单独调用 page = requests.get( ''http://www.sbacn.org/'', headers = self.header, timeout = 10 , verify = flag ),就没有问题
Sylv
2015-11-10 10:34:57 +08:00
请求的频率太高被服务器拒绝了,降低频率或用代理。
leisurelylicht
2015-11-10 10:35:06 +08:00
@fei051466 应该不是,像这样直接调用是可以得到正确结果的
bing = Bing_Search()
a = bing.dataRequest('http://www.sbacn.org/')
print a.title

http://www.sbacn.org/
<title>
上海市银行同业公会
</title>
[Finished in 1.2s]
leisurelylicht
2015-11-10 10:36:17 +08:00
@Sylv 但我并不是在反复访问一个站点,而是依次访问搜索结果,理论上每个站点只会访问一次啊
Sylv
2015-11-10 10:53:43 +08:00
@leisurelylicht 会不会有可能搜索结果里有多个相同站点的结果,在出错前已经访问过几次这个站点了?这个报错就是说服务器那边拒绝了你的请求,一般来说就是因为服务频率太高超过了阈值,或者是伪装没成功被当成爬虫拒绝了。
leisurelylicht
2015-11-10 11:14:33 +08:00
@Sylv 我看了一下搜索结果,这个域名确实只出现了一次.如果是伪装不成功的话应该我单独爬这个站点也被拒绝才对,但并没有.其实现在尝试着报 AttributeError: 'module' object has no attribute 'ConnectTimeout' 这个错的次数比较多
krizex
2015-11-10 11:38:21 +08:00
ubuntu 默认的 requests 源版本比较老,你先升级下 requests 试试呢
leisurelylicht
2015-11-10 12:17:48 +08:00
@krizex 更新了,最新没问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/234946

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX