2017年6月8日 星期四

Python邊學邊記錄-Crawler網路爬蟲-第八課-創建目錄與下載圖片

Python Crawler

在爬文章的過程中,我們會遇到想要的圖片要下載下來,像是捷克漫畫版如果有新的連載上來了,一定會癢癢的,或是表特版的正妹也是。

這時候要處理的還是怎麼去判斷這個連結是不是我們要的連結,就是又要靠正則式了!

基本上,主程式碼的部份都跟之前的相去不遠,只是多了幾個function處理新增的功能。

取得所有文章列表之後開始做後面的工作
for article in articles:
    page = get_articles(ptt_url + article['href'])
    if page:
        img_urls = parse(page)  #  這邊主要要取得圖片的連結
        saveImage(img_urls, article['title'])  #  這邊要保存圖片

接著要處理文章內的圖片連結(這個要視圖床,較多人在ptt分享都是透過imgur.com。
def parse(dom):
    soup = BeautifulSoup(dom, 'html.parser')
    links = soup.find(id='main-conetent').find_all('a')
    imgurls = []
    for link in links:
        if re.match(r'^https?://(i.)?(m.)?imgur.com',link['href']):
            imgurls.append(link['href'])
    return imgurls

最後就是把連結的資料拉下來了!
def saveImage(img_urls, title):
    if img_urls:
        try:
            dname = title.replace('?', '').replace('', '').replace(' ', '') 
            .replace('Re:', '').strip()  #  strip() 去除字串前後的空白            os.makedirs(dname)  #  創建資料夾
            for img_url in img_urls:  #  主要是把下載連結的格式再調整
                if img_url.split('//')[1].startswith('m.'):
                    img_url = img_url.replace('//m.', '//i.')
                if not img_url.split('//')[1].startswith('i.'):
                    img_url = img_url.split('//')[0] + '//i.' + img_url.split('//')[1]
                if not img_url.endswith('.jpg'):
                    img_url += '.jpg'                fname = img_url.split('/')[-1]
                urllib.request.urlretrieve(img_url, os.path.join(dname, fname))
        except Exception as e:
            print(e)

這邊記得要import os與urllib.request

沒有留言:

張貼留言