追記 : 2020年、url構造が変わってるためこのコードは動きません
細かい説明しないけど。備忘録に。
やりたいこと
営業活動を自動化しようと思って、iタウンページからメールアドレスを大量に取得するスクリプトを書きました。このスクリプトは、全国の健康・介護のお店・施設420866件の情報を(今回はメールアドレスだけ)自動的に取得することができます。
実装
""" # # # #これは、iタウンページからメールアドレスを収集するスクリプトです #このスクリプトは、全国の健康・介護のお店・施設420866件の情報を #(今回はメールアドレスだけ)自動的に取得することができます。 # # """ import requests import bs4 import re """ # # # #お約束。ループで回すたびに初期化しようとするとエラーになったので。 # # # # """ res = requests.get('https://itp.ne.jp') res.raise_for_status() soup = bs4.BeautifulSoup(res.text, "html.parser") """ # # # # #5ページ分だけ取得して、配列に保持する。 # # # """ url_list = [] for i in range(5): value = "{0}".format(i) url = 'https://itp.ne.jp/genre_dir/health/pg/%s/' % value url_list.append(url) #print(url_list) """ # # # #配列を一個づつ回して、htmlを解析して、メールアドレスだけ取得 # # # # """ for url in url_list: res = requests.get('%s' % url) soup = bs4.BeautifulSoup(res.text, "html.parser") for p in soup.find_all('a', class_='boxedLink emailLink'): line = str(p) match = re.search(r'[\w\.-]+@[\w\.-]+', line) print(match.group(0) )
結果
いっぱい取れた〜(´ω`)んで、この流れで自動的にスパム営業メールを送ってガツガツ仕事獲得だ〜!

補足
スクレイピングのコツは、urlとhtmlの構造を掴むこと。パターンをどれだけ正確に細かく掴めるかが、データを有効活用するコツ。今回の場合、メールアドレスはaタグのboxedLink emailLink
というクラスの中に必ずあったので、スクレイピングしたhtmlのページを解析して、aタグのboxedLink emailLinkクラスだけを取得して、その文字列の中から正規表現でメールアドレスを抜き出しました。
