2017-12-14 17 views
1

私はウェブサイトを削り取ろうとしています。 2つのリソースから1つはaタグからhrefを取得するためにtag.get('href')を使用し、もう1つはtag['href']を使用して同じものを取得しました。私が理解する限り、彼らはどちらも同じことをします。私はこのコードをしようとしたときしかし:さまざまな方法で美味しいスープを使用してhrefを取得する

link_list = [l.get('href') for l in soup.find_all('a')] 

はなく、辞書のアクセス方法と、.get方法で働いていました。

link_list = [l['href'] for l in soup.find_all('a')] 

これはKeyErrorをスローします。私は掻きすることに非常に慣れているので、これが愚かなものであれば容赦してください。

編集 - 両方のメソッドがfind_allの代わりにfindメソッドで機能しました。

+1

それは、二つの異なる方法です - 同じですが、 'key'があなたのdictにない場合、' l.get'はデフォルト値(https://docs.python.org/2/library/stdtypes.html#dict.get)を返し、 'l [key] 'raised KeyError – SatanDmytro

答えて

0

多分、HTML文字列に "href"がありませんか?たとえば :

from bs4 import BeautifulSoup 


doc_html = """<a class="vote-up-off" title="This question shows research effort; it is useful and clear">up vote</a>""" 
soup = BeautifulSoup(doc_html, 'html.parser') 
ahref = soup.find('a') 
ahref.get('href') 

何も起こりませんが、

ahref['href'] 

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/home/sergey/.virtualenvs/soup_example/lib/python3.5/site- 
packages/bs4/element.py", line 1011, in __getitem__ 
return self.attrs[key] 
KeyError: 'href' 
'href' 
+0

いいえ、 'a'タグには 'href'が付いています。私は掻いているウェブサイトに言及するのを忘れた。リンクはhttps://www.crummy.com/software/BeautifulSoup/です。 –

0

あなたはBeautifulSouphref属性のみを既存とのリンクを見つけてみましょうことがあります。あなたがfind_all()を経由して、2つの一般的な方法でそれを行うことができます テスト

CSS selector
link_list = [a['href'] for a in soup.find_all('a', href=True)] 

または、: `key`が辞書に存在する場合

link_list = [a['href'] for a in soup.select('a[href]')] 
関連する問題