over 7 years ago

延續之前抓取 http://blog.marsw.tw 網頁的例子
這裡示範如何把該頁的圖片存取下來的方法:
我們利用lxml這個額外的module來快速處理html來獲取我們想要的資訊
而lxml所使用的是xpath的語法

[程式碼]

04_parsing.py
# encoding: utf-8

import urllib2
from lxml import etree

request = urllib2.Request("http://blog.marsw.tw")
response = urllib2.urlopen(request)
html = response.read()

page = etree.HTML(html)
count = 0
for url in page.xpath(u"//img/@src"):
    if url.startswith("http:"):
        print url
        
        try:
            img_request = urllib2.Request(url)
            img_response = urllib2.urlopen(img_request)
            img = img_response.read()
        except:
            continue

        count = count+1
        filename = str(count)+".jpg"
        pic_out = file(filename,'w')
        pic_out.write(img)
        pic_out.close()

[程式說明]

想要抓圖片,首先要先獲得圖片的url,
而html tag中,圖片的url是記錄在img這個tag的src屬性
因此lxml的語法,找出所有img tag的src屬性寫法就是//img/@src,並且以unicode編碼
找出開頭是http的src url(其他是用相對路徑,無法直接存取該圖),之後就對該圖片做存取的動作,
同時為了避免該圖的連結失效,而造成程式中斷,因此加上了try/except的機制

爬蟲系列教學文目錄
爬蟲系列教學文程式碼
安裝Python及Python常用語法可參考 Python - 十分鐘入門

← [爬蟲] 處理不同的Content-Type(urllib2) [爬蟲] Parsing -抓取網頁標題 & XPath Axes說明(lxml) →
 
comments powered by Disqus