Python練習冊 第 0013 題: 用 Python 寫一個爬圖片的程序,爬 這個鏈接里的日本妹子圖片 :-),(http://tieba.baidu.com/p/2166231880)


這道題是一道爬蟲練習題,需要爬鏈接http://tieba.baidu.com/p/2166231880里的所有妹子圖片,點進鏈接看一下,這位妹子是日本著名性感女演員——杉本由美,^_^好漂亮啊,趕緊開始爬吧。

以下就是我的爬蟲步驟:

一.獲取頁面

雖然request和beautifulsoup模塊方便又好用,但是我還是決定使用傳統的urllib和urllib模塊,畢竟對這兩個模塊熟悉之后,就能基本明白爬蟲的原理和實現啦。

首先是導入模塊,除了前面提到的兩個模塊,我們還要導入re模塊,使用正則表達式來匹配我們想要的內容。

導入模塊之后,就可以獲取頁面了。步驟如下:

1.使用urllib2.Requst( )得到request對象。

這個對象是用於打開一個網頁的請求,可以方便的攜帶一些請求需要的信息,如headers,cookies等數據。

因為我們打開的網頁——百度貼吧不需要登錄就可以瀏覽頁面,所以request對象只需要headers對象就可以了。

2.使用urllib2.urlopen( )得到response對象。

這個對象是爬蟲頁面的對象,與文件對象類似,你可以使用read( )來得到response頁面對象的源碼。

3.使用正則匹配要爬的資源鏈接

不會正則的同學,可以學一下,很快,一個下午就能學會正則基礎啦,至少爬蟲使用的正則你就會寫啦。我們想要得到頁面的所有圖片的鏈接,那就在瀏覽器中使用CTRL+ALT+c來打開頁面查看頁面的源碼,也就是頁面的HTML文本。

找一下圖片的標簽在哪里,發現所有要下載的圖片標簽<img>的類都是BDE_image,標簽格式都一樣,但是帖子中還有廣告樓層里面的圖片標簽也是也是這個類。我可不想下載下來之后瀏覽美女圖片,突然跳出來一個廣告圖片。

那再仔細看一下頁面,發現只要點擊只看樓主選項,廣告樓層就不見了,同時頁面url后面多了幾個字符是 ?see_lz=1 。好,那我們直接在我們的請求url后加上這幾個字符就行啦,至於其他的樓層,沒有了更好^_^,反正其他樓層都是灌水。

ok,那就開始匹配我們想要的鏈接吧。使用re.compile( )來編譯匹配模式,再使用re.findall( )得到所有的圖片的src屬性,也就是鏈接的列表。

這就完成了我們爬蟲最重要的一步啦。

二.下載鏈接

下載鏈接要使用urllib.urlretrieve( ),這個函數可以將你的鏈接資源下載到本地,如果指定目錄的話會下載到目錄,否則下載為臨時文件。

那就直接迭代我們第一步得到的圖片鏈接列表,一個個全下載下來吧。

到這里,爬這個頁面的小練習,就完成啦。

我的代碼在這里:

 1 # coding=utf-8
 2 import urllib,urllib2
 3 import re
 4 
 5 #頭信息
 6 header={'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:44.0) Gecko/20100101 Firefox/44.0'}
 7 
 8 def get_img_url(page_url):#得到頁面所有圖片的鏈接
 9 
10     request=urllib2.Request(page_url,headers=header) #生成request對象
11     reference=urllib2.urlopen(request)    #獲取頁面對象
12     page=reference.read()            #讀取頁面
13 
14     regex=re.compile(r'<img.*?class="BDE_Image" src="(.*?)".*?>') #編譯正則匹配模式字符串
15     img_url_list=re.findall(regex,page)       #匹配所有圖片鏈接生成列表
16 
17     return img_url_list
18 
19 def download_img(url_list,img_path):  #從圖片鏈接下載圖片並存放在指定文件夾
20     for img_url in url_list:
21         urllib.urlretrieve(img_url,'%s/%s.jpg'%(img_path,img_url[-8:-5])) #下載圖片
22     print 'done'
23 
24 url='http://tieba.baidu.com/p/2166231880?see_lz=1' #爬蟲頁面
25 path='/home/afei/picture'  #存放路徑
26 urllist=get_img_url(url)
27 download_img(urllist,path)

 wow,杉本由美真的好漂亮啊,有鼻子有眼的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM