最近刚学习 Python,想用 Python 写一个本地请求 http 的脚本,但是遇到了一个问题,也没有搜出来解决方案,希望各位 Python 大神指教啊。感谢! 代码如下:
执行结果: <class 'str'> time: 560.594797 ms time: 1348.074913 ms
疑问:为什么我在第 27 行就执行了一句: text = response.text 却耗费了 500 多毫秒啊?(把这句去掉,就是不调用 respon.text )就会很快。 这是什么原因啊?
ps: 1.我直接访问 [百度] 的地址不加 socks 代理,是很快的。 2.直接写 socks5 代理,访问不了谷歌,所以写成了 socks5h 3.我用 nodejs 写,整个请求过程也才 700 多毫秒。
望大神赐教啊!!! Python 新人!!不胜感激!!!
1
mianju 2018-02-06 10:29:27 +08:00
用 PySocks 包可能会简单点
|
2
shuizhengqi 2018-02-06 10:39:44 +08:00
我没理解错的话,response,text 应该是解码 response 的文本内容,你是要读取内容?或者你用 BeautiFulSoup 试试
|
4
Julio OP @shuizhengqi 是的,是要读取内容,BeautiFulSoup 也要传文本内容给他,也需要先获取内容。
|
5
zhengxiaowai 2018-02-06 10:52:35 +08:00 1
对于 response.text 为什么慢,从源码中可以看出是做了一次 encoding,response 比较大时候确实是比较慢的。
源码看 https://github.com/requests/requests/blob/master/requests/models.py#L830-L866 对于代理,我也不是很清楚,我用的不多 |
6
Julio OP @zhengxiaowai 非常感谢,你说的对,我看错了,并不是代理的问题,我之前可能是使用百度首页测试的,内容比较少,我换成百度搜索页面后,这个 encoding 的时间也需要 300-400 毫秒。感谢!
|
7
ctro15547 2018-02-06 11:06:57 +08:00
学习了!
|
8
Xiaobaixiao 2018-02-06 11:44:17 +08:00
最新的 Requests 使用本地 DNS 解析域名,自然无法访问谷歌,要想真的使用代理访问,降级到 2.12.0 吧。
|
9
Julio OP @Xiaobaixiao 嗯,已经有了其他解决办法,感谢提醒!
|