requests 抓取网页,在 python shell 运行正常,文件执行报错,求原因

2015-04-24 11:04:16 +08:00
 xdcr
python shell运行正常

import requests
r = requests.get('https://www.google.com')
r.content

存为文件python google.py运行报错

r = requests.get('https://www.google.com')
File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 60, in get
return request('get', url, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 49, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 457, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 569, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 362, in send
timeout=timeout
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 516, in urlopen
body=body, headers=headers)
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 304, in _make_request
self._validate_conn(conn)
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 722, in _validate_conn
conn.connect()
File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/connection.py", line 169, in connect
self.sock = ssl.wrap_socket(conn, self.key_file, self.cert_file)
AttributeError: 'NoneType' object has no attribute 'wrap_socket'
12071 次点击
所在节点    Python
16 条回复
aru
2015-04-24 11:10:02 +08:00
也许你的系统变量里面设了代理?
换个网站试试,比如 www.intel.com
xdcr
2015-04-24 11:20:36 +08:00
@aru 代理在路由,系统没设置。
http的没问题,只要是https就不行。
xia0chun
2015-04-24 11:29:44 +08:00
你的requests版本是多少?
升级一下试试
sty
2015-04-24 11:29:51 +08:00
http明文,https加密
aru
2015-04-24 11:41:10 +08:00
r = requests.get('https://www.google.com',verify=False)

也许是证书验证问题,你试试上面的代码
xdcr
2015-04-24 11:46:00 +08:00
@xia0chun 2.4.3


@sty 我搞不懂为什么python shell正常,文件就是不行
xdcr
2015-04-24 11:47:58 +08:00
@aru 试过,一样

感觉和ssl相关的库的问题
xdcr
2015-04-24 12:23:55 +08:00
@xia0chun 换2.6.2报错requests.exceptions.SSLError: Can't connect to HTTPS URL because the SSL module is not available.
在python shell依然正常
xia0chun
2015-04-24 13:52:20 +08:00
@xdcr 你降级到2.2.1试试,这是我感觉最好用的一个版本
sirgod
2015-04-24 18:37:15 +08:00
楼主试试import ssl能行吗?还有你机器上装了几个python?
xdcr
2015-04-24 18:54:56 +08:00
@xia0chun 一样问题


@sirgod 试过,也不行。 py2.7 和py3.4
jackyspy
2015-04-25 15:50:45 +08:00
print os.environ看下环境变量是否一致,python用完整路径确保同一版本。
文件中import ssl; print ssl看看引用路径是否相同
sirgod
2015-04-25 19:20:19 +08:00
@xdcr 有可能你的python shell跟从文件运行用的不是同一个解释器,其中的一个找不到ssl库,要么是没正确安装要么就是环境变量没设置正确
xdcr
2015-04-27 09:39:03 +08:00
@jackyspy
@sirgod
多谢,确实是引用了一个错误的ssl文件
peterkai
2015-05-11 15:55:09 +08:00
@xdcr
这是怎么看出来的
我跟你遇到了相同的问题
求解决思路 谢谢!!
xdcr
2015-05-13 14:54:00 +08:00
@peterkai 按楼上的import ssl; print ssl,会提示引用的ssl文件路径,看在哪里引用了错误的文件

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

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

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

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

© 2021 V2EX