前提・実現したいこと
Pythonでスクレイピングをする、というQiitaのページを参考に
Webページ内のaタグのhref値を表示するコードを書きました。
参考コードの対象URLにアクセスした場合は正しく動くのですが
別のサイトにアクセスするよう書き換えたところエラーが出て動かなくなってしまいました。
1.問題の起こる原因
2.回避方法(事前の判別方法)
を、教えていただきたいです。
###参考コード
Python
1import urllib.request 2from bs4 import BeautifulSoup 3 4url = "https://qiita.com/chanmaru" 5res = urllib.request.urlopen(url) 6soup = soup = BeautifulSoup(res, 'html.parser') 7 8a_list = soup.findAll("a") 9for a in a_list: 10 href = a.attrs['href'] 11 print(a.string, '-->', href)
###自分が書いたコード
Python
1import requests 2from bs4 import BeautifulSoup 3 4#対象URL(気象庁アメダス) 5URL = "http://www.jma.go.jp/jp/amedas_h/today-44132.html?areaCode=000&groupCode=30" 6 7#リソースを開く 8res = requests.get(URL) 9 10#取得したデータ(テキスト形式)でインスタンス作成 11#soup = BeautifulSoup(res.text, 'html.parser') 12#obj.textで渡すと文字化けするのでobj.contentで渡すようにする 13soup = BeautifulSoup(res.content, 'html.parser') 14#多分html.parserを省略して以下のように書いても動く 15#soup = BeautifulSoup(res.content) 16 17#a要素を全て取得 18a_list = soup.find_all("a") 19 20#find_all()はリストを出力するのでfor文で1要素ずつ値を出力 21for a in a_list: 22 #取得したaタグを表示 23 #print(a.string) 24 25 #aタグのhref属性値を抽出する 26 href = a.attrs['href'] 27 #aタグの文字列と、そこからリンクしているURLを表示 28 print(a.string, '-->', href)
発生している問題・エラーメッセージ
例外が発生しました: KeyError 'href' ...(ファイルパス略) href = a.attrs['href']
試したこと
対象URLを何度か変更してみて、問題が起こったときに該当箇所のhtmlを見ると、
aタグにhref値が設定されていないことが原因のようでした。(合っているかは解りません)
また、その通りだとした場合、href値が存在するなら取得/しなければ取得せず次の処理へ、という
分岐を行いたいのですがどうやって判別すれば良いのかも解りません。
試しにif a.attrs['href']:
とか書いてみましたが同じエラーが出るだけでした…
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/31 01:13
2019/01/31 01:27
2019/01/31 10:26