昨天嘗試過爬蟲之後,才知道IMDb
今天就打算來做做看這個
我們可以透過輸入關鍵字,接下來利用爬蟲去爬資料,最後再將資料以 Flex Message 的形式回傳
首先要先製作一個爬蟲,並將我們蒐集到的資料整理好
先製作一個簡單的 function ,讀入搜尋關鍵字
最終可能會有很多結果,我們只需要取前10項即可
def search(keyword):
ret = []
r = requests.get('https://www.imdb.com/find?q={}&s=tt&ttype=ft&ref_=fn_ft'.format(keyword))
print(r.status_code)
if(r.status_code == requests.codes.ok):
soup = BeautifulSoup(r.text, 'html.parser')
result = soup.find_all('td',class_='result_text')[:10]
將爬到的結果連結存起來
待會我們會一一造訪這些頁面,獲取更多相關資訊
links = []
for i in result:
links.append(i.find('a').get('href'))
我們需要的資料包含了
for link in links:
movie = requests.get('https://www.imdb.com'+link)
if(r.status_code == requests.codes.ok):
soup_movie = BeautifulSoup(movie.text, 'html.parser')
# get ranking
if(soup_movie.find('div', class_='ratingValue') == None):
rating = 0.0
else:
rating = soup_movie.find('div', class_='ratingValue').find('span').string
info = soup_movie.find('div', class_='title_wrapper')
# get title
title = info.h1.get_text()
# get watch_time
watch_time = info.find('time').string.strip()
subtext = info.find('div', class_='subtext').find_all('a')
movie_type = []
release_time = 'Unknow'
# get movie_type & release_time
if((subtext[-1]).get_text()[0].isdigit()):
for i in subtext[:-1]:
movie_type.append(i.get_text())
release_time = subtext[-1].get_text().strip()
else:
for i in subtext:
movie_type.append(i.get_text())
poster = soup_movie.find('div', class_='poster').find('img').get('src')
一一獲取資料後,將他存放到 dictionary 裡面,之後比較方便存取
res = dict()
res['poster'] = poster
res['title'] = title
res['rating'] = rating
res['watch_time'] = watch_time
res['movie_type'] = movie_type
res['release_time'] = release_time
res['link'] = 'https://www.imdb.com'+link
ret.append(res)
print(res)
return ret
在下一篇,我們會將回傳訊息的部分完成