【TED トークの推薦システム 】トピックのクローリング
今回は、TED トークのトピックをクローリングしていきます。
実際にクローリングする HTML 構造の中で、着目するべき HTML タグを画像を出しながら説明します。
まずはソースコードをご覧ください。
import requests from bs4 import BeautifulSoup from itertools import chain if __name__ == "__main__": # クローリング先の URL url = 'https://www.ted.com/topics' # クローリングしたトピックを保存するリスト all_topics = [] # HTML 解析オブジェクト soup r = requests.get(url) soup = BeautifulSoup(r.text, 'lxml') # (1) ol タグを取得 ol_tag = soup.find('ol', class_='sl') # (2) li タグを取得 # (li タグのそれぞれの要素が各アルファベットから始まるトピックの一覧になっている) li_tags = ol_tag.find_all('li', class_='b-t:scanline', recursive=False) for li_tag in li_tags: # (3) 各トピックは span タグ内にあるため、span タグ指定で OK span_tags = li_tag.find_all('span') # .text によってタグからテキスト (=トピック) を取得可能 # .strip() で前後の余分な空白を削除 topics = [tag.text.strip() for tag in span_tags] all_topics.append(topics) # リストを平坦化 all_topics = list(chain.from_iterable(all_topics)) # ファイルに保存 with open('ted_topics.txt', 'w') as f: # リストの要素を改行文字で連結させて 1 つの文字列として保存 f.write('\n'.join(all_topics))
クローリングするときは、まずはクローリングしたいサイトの HTML の構造を確認します。
ソースコード内の (1), (2), (3) が重要なポイントになっています。
それぞれのタグが、トピック全体のリスト、各アルファベットから始まるトピックのリスト、各トピックの名称になっているのが分かるかと思います。
今回の TED トークのトピックのクローリングはとてもシンプルだったので、初めてクローリングをする人にとっては良い練習になるのではないでしょうか。
次は、各トピックのスピーチの URL 一覧を取得するためにクローリングをしていきたいと思います。