前提・実現したいこと
Pythonにて、アメリカの財務系データベースEDGARをスクレイピングしたいです。
下記サイトのパッケージを使用してスクレイピングを進めています。
Python – SEC Edgar Scraping Financial Statements
https://codingandfun.com/python-sec-edgar-scraper/
しかし、requests.get(url)のところでつまづいています。
該当のソースコード
python
1import requests 2 3selectedcompany = 'Alphabet Inc.' 4selectedreport = '10-Q' 5 6csv = pd.read_csv('2019-QTR4.tsv', sep='\t', lineterminator='\n', names=None) 7 8csv.columns.values[0] = 'Item' 9 10companyreport = csv[(csv['Item'].str.contains(selectedcompany)) & (csv['Item'].str.contains(selectedreport))] 11 12Filing = companyreport['Item'].str.split('|') 13Filing = Filing.to_list() 14 15for item in Filing[0]: 16 17 if 'html' in item: 18 report = item 19 20url = 'https://www.sec.gov/Archives/' + report 21 22headers_dic = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"} 23 24print(url) 25#urlの値確認用 26 27r = requests.get(url, headers=headers_dic) 28 29print(r.url) 30#rのurlの値確認用 31 32df = pd.read_html(r.text)
発生している問題・エラーメッセージ
print(url)結果
https://www.sec.gov/Archives/edgar/data/1652044/0001652044-19-000032-index.html
print(r.url)結果
https://www.sec.gov/Archives/edgar/data/1652044/0001652044-19-000032-index.html%0D
と、謎の%0D(キャリッジコード)が末尾に入り、その後のコードに進めません。
このキャリッジコードが発生しなくしたいです。また、今後のために発生する原因も知りたいです。
試したこと
・replaceなどで末尾の文字を削ろうとしましたが、そうするとresponceではなく文字列になってしまうため×
・url = の部分に直接urlを打ち込んで代入する→%0Dは出現せず
・requests.getのurlに直接urlを打ち込む→無事取得可能
・海外同様事例の検索(https://stackoverflow.com/questions/65030697/how-to-remove-0d-in-python-requests)→状況が少し異なる
urlの代入部分で+reportを使っているのが原因なのはなんとなくわかりました。改行や空白などはできるかぎり消したのですが、それでも結果は同様です。
report値部分を改善してどうにかならないか確認しているところですが、python初心者のため難航しています。みなさまのお知恵をお借りできればとおもい質問させていただきました。
よろしくお願いいたします。
###環境
Jupyter Notebook
Anaconda
###解決後捕捉
print(repr(url))結果
https://www.sec.gov/Archives/edgar/data/1652044/0001652044-19-000032-index.html\r
↑この/r(キャリッジコード)が入っていたのが原因でした。通常のprint(url)ではみえないことを知りませんでした。rstripでurlからこの文字列を削りました。また、そもそもlineterminator='\n'を指定していたため/rが入ってしまったようです。lineterminator指定が必要かどうかは検証中です。
回答2件
あなたの回答
tips
プレビュー