轉自:http://www.cnblogs.com/ArsenalfanInECNU/p/4780883.htmlhtml
Python官方提供了用於編寫網絡爬蟲的包 urllib.request, 咱們主要用它進行打開url,讀取url裏面的內容,下載裏面的圖片。python
分如下幾步:正則表達式
step1:用urllib.request.urlopen打開目標網站python3.x
step2:因爲urllib.request.urlopen返回的是一個http.client.HTTPResponse object,沒法直接讀取裏面的內容,因此直接調用該對象的方法read(),獲取到頁面代碼,存到html裏網絡
step3:構建正則表達式,從頁面代碼裏提取出圖片url地址。網站
step4:根據圖片url地址,用urllib.request.retrieve下載到本地url
容易出錯的地方:spa
1:python2.x和python3.x中,urlopen具體在哪一個包裏是不同的。若是你要在python2.x上實現,要自行百度正確的包。debug
2:最容易出錯的地方是正則表達式,容易出現匹配錯誤。我程序裏寫的正則表達式,在目前的網址裏是正確的,若是是其餘網址可能還會出問題,要具體問題具體分析,去debug。code
好比若是img_re=re.compile(r'(?<=src=)"\w+?jpg"')的話,會匹配成""http://tieba.........."
1 import urllib.request 2 import re 3 def getHtml(url): 4 #print("正在打開網頁並獲取....") 5 page=urllib.request.urlopen(url) 6 Html=str(page.read()) 7 print("成功獲取....") 8 return Html 9 def getImg(html): 10 img_re=re.compile(r'(?<=src=")\S+?jpg') 11 #img_re=re.compile(r'src="(.*?\.jpg)"') 12 print("the type of html is :",type(html)) 13 img_list=img_re.findall(html) 14 print("len(img_list)=",len(img_list)) 15 print("img_list[0]=",img_list[0]) 16 print("正在下載圖片......") 17 for i in range(len(img_list)): 18 print("img_list[%d]=%s" % (i,img_list[i])) 19 urllib.request.urlretrieve(img_list[i],'%s.jpg' % i) 20 print("完成圖片下載......") 21 print("一共抓到了%d張圖片" % len(img_list)) 22 if __name__=="__main__": 23 url_baidu="http://tieba.baidu.com/f?kw=%B0%A2%C9%AD%C4%C9" 24 html=getHtml(url_baidu) 25 getImg(html)