ある業界団体の特定ページにある
・会社名
・代表者名
・webページリンク
・住所
・電話番号
の情報を収集し、csvファイルにするpython3のコードを加筆修正し納品頂きたいです
以下のコードを使いトライしましたが
おそらくHTMLクラスの設定のところでつまずいてしまったのでご依頼です
import time
import csv
import re
import requests
import bs4
# 取得ページ分だけURLを生成して、配列に保持する。
begin = 1 # 取得開始ページ
end = 1 # 取得終了ページ
base_url = '特定のwebページURL'
urls = [base_url.format(page_no=i) for i in range(begin, end)]
print(urls)
# 配列を一個づつ回して、htmlを解析して、メールアドレスだけ取得
info = []
for url in urls:
print('fetching... ' + url)
res = requests.get(url)
soup = bs4.BeautifulSoup(res.text, 'html.parser')
selctions = soup.select('section')
sections = soup.find_all('section', attrs={'class': None})
for section in sections:
name = section.h4.a.string # 事業所名
link = section.h4.a['href'] # URL
p_tags = section.find_all('p')
if p_tags[0].string: # 説明は存在しない場合がある
desc = p_tags[0].string.strip().replace('\u3000', '') # 説明
else:
desc = None
addr = p_tags[1].span.next_sibling.strip()
postal_code = addr.split('\u3000')[0] # 郵便番号
addr = addr.split('\u3000')[1] # 住所
tel = p_tags[2].b.string # 電話番号
mail = p_tags[3].find('a', class_='boxedLink emailLink') # メールアドレス
if mail: # メールアドレスは掲載していない場合がある
match = re.search(r'[\w\.-]+@[\w\.-]+', mail['onclick'])
mail = match.group(0)
info.append({'name': name, 'description': desc, 'postal_code': postal_code,
'address': addr, 'tel': tel, 'mail': mail})
# from pprint import pprint
# pprint(info)
time.sleep(1) # アクセス間隔
with open('result.csv', 'w', encoding='utf8') as f:
writer = csv.DictWriter(f, fieldnames=info[0].keys())
writer.writerows(info)