pythonurllib报错
⑴ python 爬虫时,urllib2.HTTPError:HTTP Error 502:Bad Gateway是什么原因怎么解决
可能是那个网站阻止了这类的访问,只要在请求中加上伪装成浏览器的header就可以了,比如:
headers={
'User-Agent':'Mozilla/5.0(Windows;U;WindowsNT6.1;en-US;rv:1.9.1.6)Gecko/20091201Firefox/3.5.6'
}
req=urllib2.Request(
url="http://www.qiushike.com/imgrank"
,
headers=headers
)
myResponse=urllib2.urlopen(req)
⑵ Python3提示错误 AttributeError: mole 'urllib.request' has no attribute 'HTTPHander' 怎么解决
你在哪里看到这样的写法的(教程链接等)
⑶ python报错urllib.error.URLError: <urlopen error unknown url type: src="https>,Windows系统怎么解决
jango站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常。寻根朔源发现是python内置的urllib模块不支持https协议。
>>> import urllib
>>> urllib.urlopen('htom')
<addinfourl at 269231456 whose fp = <socket._fileobject object at 0xff98250>>
>>> urllib.urlopen('hm')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/usr/local/python27/lib/python2.7/urllib.py", line 86, in urlopen
return opener.open(url)
File "/usr/local/python27/lib/python2.7/urllib.py", line 204, in open
return self.open_unknown(fullurl, data)
File "/usr/local/python27/lib/python2.7/urllib.py", line 216, in open_unknown
raise IOError, ('url error', 'unknown url type', type)
IOError: [Errno url error] unknown url type: 'https'
之所以python内置的urllib模块不支持https协议是因为编译安装python之前没有编译安装类似于openssl这样的SSL库,以至于python不支持SSL
因为我用的是Centos系统所以安装openssl-devel
sudo yum install openssl-devel
之后重新编译Python
./configure(可选,因为之前已经配置过,按之前的配置来就行了,而且最好按之前的配置配编译安装以免依赖的库需要重新编译安装。)
make
make install
>>> import urllib
>>> urllib.urlopen('htt.com')
没有再报同样的错误。
在安装完openssl-devel后重新编译python前也有说需要编辑Moles文件夹内Setup.dist文件的
修改
# Socket mole helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
为
# Socket mole helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
但实际测试下来好像并不需要修改这个文件,编译的时候能自动将SSL库编译进python中。
另外需要特别注意的是,重新编译安装python后,通过可执行文件名(可能是个连接文件)运行python可能运行的还是老的python,这是因为可执行文件名没有连接到新的python可执行程序。因此要用最新的python可执行文件名或指向该名字的连接来运行python。
重新编译安装python后有可能导致需要重新编译django,MySQLdb,pycrypto,python-ldap,django-auth-ldap,django_cas,django_cas,pymongo等一些列依赖python的模块。这里要特别注意
⑷ 为什么python使用urllib2这里会出现错误
表面现象看起来是,你发送的地址给google服务器,但是此地址有问题,导致人家返回你错误,说是:
HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
而此地址,看起来,你是从浏览器之类的地方,拷贝过来的。
但是,实际上,如果需要程序模拟此过程的话,需要找到此地址中的各种参数,即:
num=100
hl=zh-CN
newwindow=1
safe=strict
q=inurl%3Aadmin_login.aspx
oq=inurl%3Aadmin_login.aspx
gs_l=serp.3...125521.131943.0.132041.38.31.1.0.0.3.209.2367.23j3j1.27.0...0.0...1c.1.bvH-WnKtKjg
中每个参数的值,是如何获得的,
然后再用程序去模拟过程,生成对应的参数,
然后才是去将此地址发送给人家的google的服务器,才能获得你所想要的结果的。
总之一句话,先要自己搞懂内部执行的过程,然后才是用程序模拟此过程。
⑸ python3 import urllib.request错误求解
有区别。python能导入的有mole和package,mole是一个py文件,package是一堆py文件的一个特殊文件夹,urllib就属于package。具体的度娘
⑹ Linux下Python2.7使用urllib2.urlopen报错,应该怎么解决
ubuntu 的控制台默认是utf8编码的吧。而且这个google返回的是big5编码吗,用下面的代码解码下试试 url="网址" content = urllib2.urlopen(url).read() print content.decode('big5').encode('utf8')
⑺ python urllib2进行网页源代码扒取时,出现urllib2.HTTPError: HTTP Error 250: Forbidden问题
HTTP请求的Headers包含浏览器的信息、所使用的语言、请求的主机、COOKIE等信息。
其中最重要的两项是浏览器的信息User-Agent,如果请求中没有User-Agent,网站会认为不是人在浏览器的请求,是恶意攻击
对于需要登录的网站,请求中往往需要COOKIE来验证用户,来获取打开某些网站的权限。
使用firefox浏览器的开发者工具箱>网络选项,可以很容易获取User-Agent等头信息
headers={"User-Agent":"Mozilla/5.0Firefox/35.0",
"Cookie":"BDUSS=AAAAAAAAAAAAAAAAAAAAAAAA",}
request=urllib2.Request(url,postData,headers=headers)
response=urllib2.urlopen(request)
⑻ python3中使用urllib进行https请求
刚入门python学习网络爬虫基础,我使用的python版本是python3.6.4,学习的教程参考 Python爬虫入门教程
python3.6的版本已经没有urllib2这个库了,所以我也不需要纠结urllib和urllib2的区别和应用场景
参考这篇官方文档 HOWTO Fetch Internet Resources Using The urllib Package 。关于http(s)请求一般就get和post两种方式较为常用,所以写了以下两个小demo,url链接随便找的,具体场景具体变化,可参考注释中的基本思路
POST请求:
GET请求:
注意,
使用ssl创建未经验证的上下文,在urlopen中需传入上下文参数
urllib.request.urlopen(full_url, context=context)
这是Python 升级到 2.7.9 之后引入的一个新特性,所以在使用urlopen打开https链接会遇到如下报错:
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)
所以,当使用urllib.urlopen打开一个 https 链接时,需要先验证一次 SSL 证书
context = ssl._create_unverified_context()
或者或者导入ssl时关闭证书验证
ssl._create_default_https_context =ssl._create_unverified_context