не удалось найти значение атрибута 'href' в теге 'a', но когда я попробовал это с атрибутом 'class' в теге 'table', это сработало - PullRequest
0 голосов
/ 28 апреля 2020
import requests
r=requests.get('https://www.crummy.com/software/BeautifulSoup/')
from bs4 import BeautifulSoup as bs
soup=bs(r.text,'html.parser')
links=[x['href'] for x in soup.find_all('a')]
links 

ошибка:

KeyError                                  
Traceback (most recent call last)
<ipython-input-137-97ef77b6e69a> in <module>
----> 1 links=[x['href'] for x in soup.find_all('a')]
      2 links

<ipython-input-137-97ef77b6e69a> in <listcomp>(.0)
----> 1 links=[x['href'] for x in soup.find_all('a')]
      2 links

~\anaconda3\lib\site-packages\bs4\element.py in __getitem__(self, key)
   1319         """tag[key] returns the value of the 'key' attribute for the Tag,
   1320         and throws an exception if it's not there."""
-> 1321         return self.attrs[key]
   1322 
   1323     def __iter__(self):

KeyError: 'href'

, но следующий код работает нормально:

import requests
r=requests.get('https://en.wikipedia.org/wiki/Harvard_University')
from bs4 import BeautifulSoup as bs
soup=bs(r.text,'html.parser')
classes=[table['class'] for table in soup.find_all('table')]
classes 

1 Ответ

0 голосов
/ 28 апреля 2020

Первый веб-сайт содержит следующий элемент:

<a name="Download">

Этот якорь не имеет атрибута href (это не ссылка, он используется в качестве цели для фрагмента #Download), поэтому вы получаете ошибка.

Вы можете использовать селектор, чтобы отфильтровать только те теги с атрибутом href.

links=[x['href'] for x in soup.select('a[href]')]
...