前提・実現したいこと
webスクレイピングで取得した結果をcsvファイルに出力したいのですが、
項目のみが記載された空のcsvファイルが生成されてしまいます。
サイトは下記を参考にしました。
https://qiita.com/kuto/items/9730037c282da45c1d2b
https://arakan-pgm-ai.hatenablog.com/entry/2018/01/17/080000
どのように書き換えたら、検索結果を適切にcsvファイルに出力できるのでしょうか。
何卒、よろしくお願い致します。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\xxxx\OneDrive\ドキュメント\studyplan\0810-2.py", line 32, in <module> search_results_df = get_search_results_df() File "C:\Users\xxxx\OneDrive\ドキュメント\studyplan\0810-2.py", line 20, in get_search_results_df url = tag1.select("a")[i].get("href") IndexError: list index out of range
該当のソースコード
python
1from bs4 import BeautifulSoup 2import requests 3import pandas as pd 4import re 5 6def get_search_results_df(): 7 columns = ["rank", "title", "writer", "year", "citations", "url"] 8 df = pd.DataFrame(columns=columns) #表の作成 9 list_keywd = ['脳', '神経' ,'認知'] 10 html_doc = requests.get('https://scholar.google.co.jp/scholar?num=100&q=' + ' '.join(list_keywd)).text 11 soup = BeautifulSoup(html_doc, "html.parser") # BeautifulSoupの初期化 12 tags1 = soup.find_all("h3", {"class": "gs_rt"}) # title&url 13 tags2 = soup.find_all("div", {"class": "gs_a"}) # writer&year 14 tags3 = soup.find_all(text=re.compile("引用元")) # citation 15 16 rank = 1 17 i = 0 18 for tag1, tag2, tag3 in zip(tags1, tags2, tags3): 19 title = tag1.text.replace("[HTML]","") 20 url = tag1.select("a")[i].get("href") 21 writer = tag2.text 22 writer = re.sub(r'\d', '', writer) 23 year = tag2.text 24 year = re.sub(r'\D', '', year) 25 citations = tag3.replace("引用元","") 26 se = pd.Series([rank, title, writer, year, citations, url], columns) 27 df = df.append(se, columns) 28 rank += 1 29 i += 1 30 return df 31 32search_results_df = get_search_results_df() 33filename = "Google_Scholar.csv" 34search_results_df.to_csv('/Users/yukak/OneDrive/filename', encoding="utf-8") 35 36
試したこと
変数urlを出力したところ、以下のようになったので、
for文ループの途中までは、値は取得できているようです。
https://ci.nii.ac.jp/naid/50002355137/
http://jlc.jst.go.jp/JST.JSTAGE/apr/22.130?from=Google
https://www.jstage.jst.go.jp/article/jcns/18/4/18_KJ00005587432/_article/-char/ja/
https://www.jstage.jst.go.jp/article/jcns/10/10/10_KJ00002978249/_article/-char/ja/
https://ci.nii.ac.jp/naid/110006484978/
http://www.academia.edu/download/43942189/Social_cognition_of_schizophrenia_bridgi20160321-14427-2daer7.pdf
https://www.jstage.jst.go.jp/article/ojjscn1969/28/5/28_5_418/_article/-char/ja/
http://jlc.jst.go.jp/DN/JALC/00080622550?from=Google
https://www.jstage.jst.go.jp/article/jjrm1964/32/10/32_10_670/_article/-char/ja/
https://www.jstage.jst.go.jp/article/fpj/125/2/125_2_68/_article/-char/ja/
Traceback (most recent call last):
File "C:\Users\yukak\OneDrive\ドキュメント\studyplan\0810-2.py", line 33, in <module>
search_results_df = get_search_results_df()
File "C:\Users\yukak\OneDrive\ドキュメント\studyplan\0810-2.py", line 20, in get_search_results_df
url = tag1.select("a")[i].get("href")
IndexError: list index out of range
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー