在簡書寫Python爬蟲的文章超過30篇了(《Python爬蟲文章專輯》)囚枪,上周加了不少想學(xué)習(xí)Python爬蟲的朋友,居然有兩位簡友說劳淆,是看我的文章學(xué)會Python的链沼,還有一位朋友說,一晚上一直在看我寫的Scrapy文章(有15篇文章)沛鸵。
一直都有一些完合零基礎(chǔ)的童鞋加我括勺,想學(xué)習(xí)Python。我就想整理一個Python從0開始學(xué)的系列文章曲掰,有一段時間還想把這個專題取名為“適合女孩子學(xué)的Python教程”(Python Girls)疾捍,就是要進(jìn)一步降低學(xué)習(xí)的門檻,做到有趣栏妖,實用拾氓,能快速應(yīng)用。
今天的文章其實不是完全從0開始底哥,是適合了解一些編程語言,或者在大學(xué)學(xué)會C語言課程房官。Python語言的學(xué)習(xí)方法和環(huán)境搭建準(zhǔn)備趾徽,我會另寫一篇。
如果你使用的是Mac或Linux系統(tǒng)翰守,是自帶Python環(huán)境的孵奶。
今天先從一個小爬蟲,一段小代碼開始蜡峰,實現(xiàn)批量下載圖片的功能了袁。把貼吧這個頁面上的圖片都下載下來。
http://tieba.baidu.com/p/3205263090
一湿颅、實現(xiàn)的流程
只有3步:
1)拿到網(wǎng)頁的源碼
2)匹配出網(wǎng)頁中圖片的url
3)把圖片保存到本地(電腦中)
二载绿、實現(xiàn)過程解析
1)我們可以通過在網(wǎng)頁上點擊右鍵,“查看頁面源代碼”油航,來看一個網(wǎng)頁的背后是由這些代碼組成的崭庸。
是的,這太復(fù)雜了,我們也不必去讀它怕享。第一步执赡,就是要在程序中拿到它。在Python中很簡單函筋,只要3行代碼就可以實現(xiàn):
import urllib
page = urllib.urlopen('http://tieba.baidu.com/p/3205263090')
html = page.read()
print html
在終端上運行一下沙合,就是這樣,拿到網(wǎng)頁的源碼:
第一行代碼跌帐,是導(dǎo)入urllib模塊首懈,urllib是Python用于網(wǎng)絡(luò)訪問的基礎(chǔ)模塊。urlopen()
方法就是打開一個url含末,返回一個文件對象猜拾,然后就可以進(jìn)行類似文件對象的操作。
2)要找出文章中的圖片地址進(jìn)行正則表達(dá)式的匹配佣盒。這是剛開始學(xué)習(xí)的難點挎袜。
可以理解成,網(wǎng)頁中每個圖片的地址(url)不一樣肥惭,要找出他們的規(guī)律盯仪。
在頁面上的圖片右鍵“查看元素”,找到這個圖片對應(yīng)的代碼:
紅色框中對應(yīng)的 scr=
后面的就是我們要得到的內(nèi)容蜜葱。
reg = r'src="([.*\S]*\.jpg)" pic_ext="jpeg"'
這行代碼不太理解的話全景,先拷過來∏6冢可以理解成為這個就是能對得上上面紅色框中src="xxxxoooo" pic_ext="jpeg"
的模子爸黄。
這樣看來,正則表達(dá)式是一個學(xué)習(xí)的重點揭鳞。
3)注意我們找到的要下載的圖片是多個炕贵,用循環(huán)迭代出來,一個個保存到我們的電腦就可以了
#生成一個我們所需要的Pattern(正則表達(dá)式)實例
imagereg = re.compile(reg)
#以列表形式返回全部能匹配的子串野崇。
imgurls = re.findall(imagereg, html)
x = 1
for imgurl in imgurls:
urllib.urlretrieve(imgurl, '/Users/apple/Desktop/a/%s.jpg' % x)
x +=1
urlretrieve()
方法上將url定位到的html文件下載到你本地的硬盤中称开。第一個參數(shù)是要下載的url,第二個參數(shù)是保存的路徑+文件名乓梨。注意你寫的時候要改成你電腦上的路徑鳖轰。
完整的代碼:
#coding=utf-8
import re
import urllib
# 獲取網(wǎng)頁源代碼的方法
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
html = getHtml('http://tieba.baidu.com/p/3205263090')
reg = r'src="([.*\S]*\.jpg)" pic_ext="jpeg"'
#正則表達(dá)式的字符串形式,編譯為Pattern實例
imagereg = re.compile(reg)
#搜索string,以列表形式返回全部能匹配的子串
imgurls = re.findall(imagereg, html)
x = 1
for imgurl in imgurls:
urllib.urlretrieve(imgurl, '/Users/apple/Desktop/a/%s.jpg' % x)
x +=1
看一下運行的結(jié)果扶镀。
總結(jié)一下:
- Python對網(wǎng)絡(luò)訪問的模塊封裝得很好蕴侣,代碼少。
- 需要對網(wǎng)頁了解一些臭觉,正則表達(dá)式在這里是關(guān)鍵睛蛛,我們后面還有簡單的方法鹦马。
- 學(xué)習(xí)一個東西從興趣開始,先做個小東西出來忆肾,這樣學(xué)起來比較快荸频。