2017-09-02 1 views
1

J'essaie d'extraire toutes les URL d'une page et de mettre toutes ces URL dans une liste. Cependant, quand je cours les codes, il montre un message d'erreur comme: "tag[key] returns the value of the 'key' attribute for the tag, and throws an exception if it's not there." Je me demande comment je peux résoudre ce problème. Mes codes sont comme ci-dessous:Impossible de placer des URL dans une liste (BeautifulSoup)

import urllib.request 
from bs4 import BeautifulSoup 

r = 'https://stackoverflow.com/' 
openedUrl = urllib.request.urlopen(r) 

soup = BeautifulSoup(openedUrl, 'lxml') 

aa = soup.find_all('a') 
href = [] 
for a in aa: 
    href.append(a['href']) 

print(href) 

Répondre

1

Le problème est que certains « a » balises n'ont pas de « href » attribut, et Python renvoie une exception KeyError lorsque vous essayez d'accéder a['href'].

Vous pouvez éviter cela si vous définissez l'argument de mot-clé href sur True.

aa = soup.find_all('a', href=True) 

Lorsque vous accédez à des clés de la balise attributs, il est préférable d'utiliser la méthode get, car elle retourne None si la clé n'existe pas et il ne soulèvera pas une exception.

+1

Cela fonctionne. Merci beaucoup! – tzu