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
沒有留言:
張貼留言