都知道Python的語法很簡單易上手,也很適合拿來做爬蟲等等,這里就簡單講解一下爬蟲入門——簡單地爬取下載網站圖片。
效果
就像這樣自動爬取下載圖片到本地:
代碼:
其實很簡單,我們直接看下整體的代碼:
#coding = utf-8
import urllib
import re
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = 'src="(.+?\.jpg)" alt='
imgre = re.compile(reg)
imglist = re.findall(imgre, html)
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl, '%s.jpg' % x)
x+=1
return imglist
html = getHtml("http://pic.yxdown.com/list/0_0_1.html")
print getImg(html)
導入庫:
第一行的utf-8是為了支持中文。
這里我們導入了兩個庫,分別是 urllib 和 re。urllib 是用來進行 url 網絡請求的,而 re 是一個正則表達式匹配的庫。這里我們要先對網站進行模擬請求,然后找到網站中的圖片進行下載。
請求網站:
第一個方法:getHtml。
這就是用來模擬瀏覽器訪問網站的,參數 url 是要訪問的網站鏈接,這里我們在下面的變量 html 處調用了這個方法,其訪問的 url 是一個圖片網站,關于選擇訪問網站還有一點等下要說一下。
在這個方法中,我們先用了 urllib 庫的 urlopen 方法來打開網站,然后通過 read 方法來獲取網站的源代碼,其實就跟在網頁中“右鍵-->檢查“是一個意思。最后返回了讀取到的網站源代碼。
上面說了要注意的一點是,由于很多網站會禁止人們隨意爬取數據,有反爬蟲的技術,所以在選擇要爬取的網站的時候,最好先通過這個方法獲取網站源代碼,然后 print 輸出 html 變量看一下獲取到的內容是否是正常的網頁源代碼,而不是403之類的禁止訪問,如果被禁止了,那么自然也不可能爬取到數據了。
找到圖片:
接下來是一個 getImg 方法。
在這個方法中,我們設置了一個正則表達式,用來在網頁源代碼中找到圖片的資源路徑,這個正則表達式要根據不同的網站去具體設置,比如我爬取的這個網站,圖片對應的源代碼是這樣的:
因此我們設置的正則表達式就是 reg = 'src="(.+?.jpg)" alt=' ,其實就是根據圖片資源路徑前后的內容來限制的。
這里也要注意一點,有的網站做了動靜分離,圖片有其單獨的完整資源路徑,而有的是直接是相對位置,這時候要么對其路徑進行處理,但大多時候你并不知道怎么處理才能拼出完整路徑,因此還是找有完整資源路徑的圖片來試驗比較好。
緊接著用 re 庫的 compile 函數將正則表達式轉換成正則表達式對象,然后使用 findall 函數尋找 html 網頁源代碼中包含的匹配 imgre 的所有內容,返回一個序列。我們可以輸出這個序列,可以看到大量圖片資源路徑組成的一個序列,如果沒爬取到,就是個空序列了。
下載圖片
最后一步就是下載圖片,這里我們用 for 循環,將圖片資源路徑中的每個圖片,使用 urllib 庫的 urlretrieve 函數來下載圖片,這個函數其實可以接受很多參數,這里我們設置了要下載的圖片資源路徑和要命名的名字(我們使用一個變量x來對每個圖片依次命名為0,1,2...),還可以設置下載路徑、用來顯示下載進度的回調函數等等。如果不設置下載路徑默認會下載到代碼文件當前所在的文件夾。
執行
現在,去執行一次代碼就可以啦,mac本身是支持python的,不用配置環境,直接將代碼放入一個 .py 文件中,使用終端進入其文件位置,敲入 python xxx.py 命令就可以啦。