剛接觸Python爬蟲,首先使用的urllib2這個(gè)庫帖鸦,記錄下使用的要點(diǎn)芝薇。由于是初學(xué),有不對的地方等發(fā)現(xiàn)了再來更正~ *
使用的Python3.6的urllib2模塊(urllib2.request)
在Python2.x中就是urllib2
urlopen :
向指定的URL發(fā)送請求作儿,并返回服務(wù)器響應(yīng)的文件對象
例:
import urllib2.repuest
respose = urllib2.repuest.urlopen("http://www.baidu.com")
#類文件對象支持 文件對象的操作方法洛二,可以用read()方法讀取全部內(nèi)容
html = respose.read()
#打印輸出
print(html)
- 這樣就把網(wǎng)頁的全部數(shù)據(jù)都爬下來了,是不是很簡單 ??
但是如果需要執(zhí)行更復(fù)雜的操作,比如增加HTTP爆頭晾嘶,就需要?jiǎng)?chuàng)建一個(gè)Request 實(shí)例來作為urlopen()的參數(shù)
在urlopen()之前 先使用Request()
#Request實(shí)例對象
request = urllib2.request.Request("http://www.baidu.com")
#然后再使用urlopen()
response = urllib2.request.urlopen(request)
Request實(shí)例妓雾,除了必要的url參數(shù),還有兩個(gè)可選的參數(shù)
data(默認(rèn)空):url攜帶提交的數(shù)據(jù)变擒,
headers(默認(rèn)空):包含需要發(fā)送的http報(bào)頭的鍵值對君珠,字典格式
User-Agent
但是這樣直接用urllib2給一個(gè)網(wǎng)站發(fā)送請求的話,確實(shí)略有些唐突了娇斑,就好比策添,人家每家都有門,你以一個(gè)路人的身份直接闖進(jìn)去顯然不是很禮貌毫缆。而且有一些站點(diǎn)不喜歡被程序(非人為訪問)訪問唯竹,有可能會拒絕你的訪問請求。
但是如果我們用一個(gè)合法的身份去請求別人網(wǎng)站苦丁,顯然人家就是歡迎的浸颓,所以我們就應(yīng)該給我們的這個(gè)代碼加上一個(gè)身份,就是所謂的User-Agent頭
- 說白了 就是讓我們利用給出的參數(shù)旺拉,偽造成各式各樣瀏覽器發(fā)送數(shù)據(jù)的樣子产上,騙過服務(wù)端的檢查。
import urllib2.request
url = "http://www.baidu.com"
#IE 9.0 的 User-Agent蛾狗,包含在 ua_header里
ua_header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
# url 連同 headers晋涣,一起構(gòu)造Request請求,這個(gè)請求將附帶 IE9.0 瀏覽器的User-Agent
request = urllib2.request.Request(url, headers = ua_header)
# 向服務(wù)器發(fā)送這個(gè)請求
response = urllib2.urlopen(request)
html = response.read()
print(html)