問題描述:File "D:\python\Lib\httplib.py", line 417, in _read_status
raise BadStatusLine(line)
首先我們得對這兩行代碼並對此進行解釋
user_agent='Mozilla/4.0(compatible;MSIE 5.5; Windows NT)'
headers ={ 'User-Agent':user_agent}
User-Agent是http協議中的一部分,屬於頭域的組成部分
這是一種向范文網站提供你所使用的瀏覽器類型,操作系統,瀏覽器內核等信息的標識
通過這個標識,用戶所訪問的網站可以顯示不同的排版從而為用戶提供更好的體驗或者
進行信息統計
IE版本Mozilla/4.0(compatible;MSIE8.0;Windows NT 6.0)
版本號是MSIE之后的數字,比如MSIE 8.0表示ie8,而Window NT 6.1對應操作系統是window7
Windows NT 6.0 對應操作系統 windows vista
Windows NT 5.2 對應操作系統 windows 2003
Windows NT 5.1 對應操作系統 windows xp
Windows NT 5.0 對應操作系統 windows 2000
UNIX/LINUX 為X11代替
Firefox版本Mozilla/5.0(Windows;U;Windows NT 5.2)Gecko/20088070208 Firefox/3.0.1
其中N:表示無安全加密 I表示弱安全加密 U:表示強安全加密,上面的u表示加密等級
Chrome版本Mozilla/5.0(Windows;U;Windows NT 5.2)AppleWebKit/525.13(KHTML,like Gecko)
其中版本號是chrome后的數字
[USER_AGENT] => Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; 360SE)
注意以上的User-Agent的作用就是偽裝成瀏覽器修改http包中的header來實現,
此條代碼的試用環境是網站反感爬蟲的到訪
而這條語句本身沒有問題,正如用User_agent來偽裝瀏覽器尋求訪問,在將headers設置成我們偽裝的地址
此時我們又需要知道urllib和urllib2模塊的區別和用法
區別:1.在python中urllib和urllib2不可互相代替
2.urllib2是urllib的增強,但是urllib2有urllib沒有的函數
3.urllib2可以用來設置request參數,來修改header的頭,更改user agent
4.urllib支持設置編碼的函數,urllib.urlencode在模擬登陸的時候,經常要編碼過后才能登陸
5.urllib2和urllib一起搭配使用.
關於urllib2的介紹
urllib2提供基礎函數urlopen,通過向指定的url發出請求來獲取數據,最簡單的形式就是
import urllib2
response=urllib2.urlopen('網頁')
html=response.read()
這個過程就是我們平時刷網頁的代碼形式,基於請求響應模型
response=urllib2.urlopen('網頁')
這個過程實際上是有兩個步驟:
我們指定一個域名並發送請求
request=urllib2.request('網頁')
服務器響應客戶端的請求
response=urllib2.urlopen(requset)
諤諤扯遠了,開頭的這個問題的原因是在request請求語句中並沒有將headers添加進去,無法構成有效請求,導致請求列表不存在,嗯我是這樣理解的
request = urllib2.Request(url,headers=headers)這樣了之后這個錯誤就消失了,附上圖片