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