昨天嘗試過爬蟲之後,才知道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
在下一篇,我們會將回傳訊息的部分完成