[Python]BeautifulSoup4を利用したスクレイピング


Beautiful Soup

Beautiful Soup Documentation — Beautiful Soup 4.12.0 documentation (crummy.com)

このライブラリを利用することで、HTMLから目的の要素を取得しやすくする。
例えば、headタグ内のmetaをすべて抽出するコードは次の通り。

import bs4
...(中略)...
    html = bs4.BeautifulSoup(body, 'html.parser')
    head = html.find('head')
    metas = head.find_all('meta')

スクレイピングの基本

HTML構造に基づき、「ターゲットの特徴を探す」が基本になる。
そのため、HTML構造が変わったりした場合は、特徴の探し方など見直す必要がでてくる。
HTML全体または部分的に構造を確認してプログラミングする、という地味な作業になる。

尚、Single Page Application (SPA)のサイトは画面に対するアクションにより動的に読み込まれるので、テストフレームワークなどを併用する必要がある。Cypress、Appiumなど。

また、収集したデータはAIの学習データや研究に用いること自体は問題にならない。
収集したデータを目的外(例外事項から逸脱する)で利用したり、第三者に提供・公開など、著作権を侵害する行為はアウト。
日本では、何年も前から法整備済みなので、そちらで確認しておくと良い。
法はあくまで日本が適用範囲。外国に至ってはその法に従うこと。

収集対象のサイトをホスティングするサーバーへの負荷についても考え、過度なアクセスをしない。
具体的には、人間がアクセスしているものと同じ頻度とする。
収集したデータはデータレイクに溜め込むなど、必要最低限のアクセスを心がける。