実現したいこと
https://hospital.fujita-hu.ac.jp/
上記のサイトの診療科ページにある医者情報をスクレイピングしたい。
診療科をクリックして、その下に医者紹介ページがあります。
なので、診療科ごとのページまで遷移し、医者の情報をスクレイピングする必要があります。
https://hospital.fujita-hu.ac.jp/department/emergency-general-staff.html
発生している問題・分からないこと
実行してもエラーは発生しないのですが、情報を取得できないです。
空のCSVが出力されてしまう
該当のソースコード
python
1import requests 2from bs4 import BeautifulSoup 3 4# 藤田医科大学病院のウェブサイトのURLを指定 5url = "https://hospital.fujita-hu.ac.jp" 6 7# ウェブページを取得 8response = requests.get(url) 9html_content = response.content 10 11# BeautifulSoupを使ってHTMLを解析 12soup = BeautifulSoup(html_content, "html.parser") 13 14# 各診療科のページのリンクを取得 15department_links = soup.find_all("a", {"class": "department-link"}) 16 17# 医師情報を格納するリスト 18doctors = [] 19 20# 各診療科のページを順に処理 21for link in department_links: 22 department_url = url + link["href"] 23 department_response = requests.get(department_url) 24 department_soup = BeautifulSoup(department_response.content, "html.parser") 25 26 # 医師紹介ページのリンクを取得 27 doctor_links = department_soup.find_all("a", {"class": "doctor-link"}) 28 29 # 各医師ページを処理 30 for doctor_link in doctor_links: 31 doctor_url = url + doctor_link["href"] 32 doctor_response = requests.get(doctor_url) 33 doctor_soup = BeautifulSoup(doctor_response.content, "html.parser") 34 35 # 医師の情報を抽出 36 name = doctor_soup.find("h2", {"class": "doctor-name"}).text.strip() 37 specialty = doctor_soup.find("div", {"class": "doctor-specialty"}).text.strip() 38 qualifications = doctor_soup.find_all("div", {"class": "doctor-qualification"}) 39 40 # 医師の情報をリストに追加 41 doctor_info = { 42 "name": name, 43 "specialty": specialty, 44 "qualifications": [q.text.strip() for q in qualifications] 45 } 46 doctors.append(doctor_info) 47 48# 医師情報をCSVファイルに出力 49import csv 50with open("doctors.csv", "w", newline="", encoding="utf-8") as csvfile: 51 fieldnames = ["name", "specialty", "qualifications"] 52 writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 53 writer.writeheader() 54 for doctor in doctors: 55 writer.writerow(doctor)
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
調べてみても情報を取得できない
補足
特になし
# 各診療科のページのリンクを取得
department_links = soup.find_all("a", {"class": "department-link"})
department-link クラスの a 要素が存在しないので department_links が空リストになります。そのため、以降のループ処理が実行されずに医師情報を格納するリスト doctor も空リストのままになっています。
スクレイピングすることが、当該サイトのサイトポリシーに反しているように思えますが、許可は得ておらえるのでしょうか?
https://hospital.fujita-hu.ac.jp/site-policy.html
「これらコンテンツ(文章、図画、写真、各種データ等)は、日本の著作権法、条約および他国の著作権法にいう著作権により保護されており、私的利用の範囲を超えて利用することはできず、また、権利者の許可なく改変、複製、賃貸、貸与、販売、出版、送信、放送等、方法の如何を問わず第三者の利用に供することを固く禁じます。ただし、個々の著作物に個別の利用条件が付されている場合は、当該条件が優先されます。」