周五跟着蟲師的博客學習了一下Python爬蟲(爬取網頁圖片),然后到下班還沒運行起來,后面請教博客底下留言板里的童鞋,是因為版本問題導致,蟲師用的2.7版本,我用的是版本3,后面照着熱心的網友寫的修改了一下,本以為會好,然后還是沒能跑起來,最終在周六的晚上在我同事的耐心指導下,由於幾個空格問題,終於給運行成功了……(注:原諒小白由於各種語法,空格不熟悉等問題造成的這種低級錯誤),所以就想寫進博客方便以后自己查看和更好的幫助其他跟我一樣剛學習的Python的同學。
版本:Python3
開發工具:pycharm
注:如果是使用Python2的童鞋可以借鑒測試大牛蟲師的博客: http://www.cnblogs.com/fnng/p/3576154.html#comment_tip
import urllib.request import re import chardet def getHtml(url): page=urllib.request.urlopen(url) html =page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre=re.compile(reg) encode_type=chardet.detect(html) html=html.decode(encode_type['encoding']) imglist=re.findall(imgre,html) x=0 for imgurl in imglist: urllib.request.urlretrieve(imgurl,'%s.jpg' %x) x+=1 return imglist html=getHtml("http://tieba.baidu.com/p/2460150866") print(getImg(html))
一、導入模塊說明
urllib.request:獲取web頁面數據 re:正則表達式模塊,用於后面代碼中提取圖片數據 chardet:用來識別編碼模塊
二、函數說明
第一個getHTML函數用於獲取web數據。
urllib.open()方法用於打開一個URL地址;
read()方法用於讀取URL上的數據,向getHtml()函數傳遞一個網址,並把整個頁面下載下來。執行程序就會把整個網頁打印輸出。
返回一個html。
第二個getImg函數用於在獲取的整個頁面中篩選需要的圖片連接。
reg正則表達式用於提取網頁中包含.jpg的圖片
re.compile 將正則表達式轉換為模式對象,可以實現更有效率的匹配
chardet用來識別編碼,encode方法再將此編碼轉換成字符串
re.findall() 方法讀取html 中包含 imgre(正則表達式)的數據。
第三個for循環用於獲取網頁中的圖片。
for循環對獲取的圖片連接進行遍歷,為了使圖片的文件名看上去更規范,對其進行重命名,命名規則通過x變量加1。
urllib.urlretrieve()方法,直接將遠程數據下載到本地,保存的位置默認為程序的存放目錄
程序運行完成,將在存在程序目錄下看到下載到本地的文件。
希望能對大家有幫助~~~