iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
1
自我挑戰組

LINE BOT 新手村30日攻略系列 第 21

Day21 電影資訊查詢 - 1

  • 分享至 

  • xImage
  •  

昨天嘗試過爬蟲之後,才知道IMDb
今天就打算來做做看這個
我們可以透過輸入關鍵字,接下來利用爬蟲去爬資料,最後再將資料以 Flex Message 的形式回傳

爬蟲

今日練習 Github 連結

首先要先製作一個爬蟲,並將我們蒐集到的資料整理好

先製作一個簡單的 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

在下一篇,我們會將回傳訊息的部分完成


上一篇
Day20 Python 爬蟲 Selenium
下一篇
Day22 電影資訊查詢 - 2
系列文
LINE BOT 新手村30日攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言