2011-09-22 2 views
1

J'essaie d'analyser HTML avec BeautifulSoup.parse html tags, basé sur une classe et href tag utilisant belle soupe

Le contenu que je veux est comme ceci:

<a class="yil-biz-ttl" id="yil_biz_ttl-2" href="http://some-web-url/" title="some title">Title</a> 

j'ai essayé et obtenu l'erreur suivante:

maxx = soup.findAll("href", {"class: "yil-biz-ttl"}) 
------------------------------------------------------------ 
    File "<ipython console>", line 1 
    maxx = soup.findAll("href", {"class: "yil-biz-ttl"}) 
              ^
SyntaxError: invalid syntax 

ce que je veux est la chaîne: http://some-web-url/

Répondre

1
soup.findAll('a', {'class': 'yil-biz-ttl'})[0]['href'] 

Pour trouver tous ces liens:

for link in soup.findAll('a', {'class': 'yil-biz-ttl'}): 
    try: 
     print link['href'] 
    except KeyError: 
     pass 
+0

et s'il y avait plus de 10 liens de ce type, vos récupérations seulement la première à droite? – whatf

+0

J'ai modifié ma réponse pour montrer comment vous pouvez trouver tous ces liens dans la page. – infrared

3

Vous êtes absent une citation après "class:

maxx = soup.findAll("href", {"class: "yil-biz-ttl"}) 

devrait être

maxx = soup.findAll("href", {"class": "yil-biz-ttl"}) 

aussi, je ne pense pas que vous pouvez rechercher un attribut comme href comme ça, je pense que vous devez rechercher un tag:

maxx = [link['href'] for link in soup.findAll("a", {"class": "yil-biz-ttl"})] 
+1

Vous devez également filtrer les éléments '' qui n'ont pas d'attribut 'href'. – jfs

+0

'link ['href'] pourrait être plus approprié que 'link.href' ici. Ce dernier renvoie le premier élément '' du lien enfant (pas son attribut). – jfs

+0

@ J.F.Sebastian J'ai modifié la version de la clé. J'ai bien vu cette syntaxe dans la belle documentation de la soupe, mais en la regardant maintenant, il semble que ce soit juste pour tag.name qui est spécial. – agf

0

Eh bien d'abord tout ce que vous avez une erreur de syntaxe. Vous avez mal vos citations dans class partie.

Essayer:

maxx = soup.findAll("href", {"class": "yil-biz-ttl"})

+0

L'exemple html de la question montre que l'OP se soucie des éléments '', pas '' – jfs

1

Pour trouver tous les <a/> éléments de la classe CSS "yil-biz-ttl" qui ont href attribut avec quoi que ce soit en elle:

from bs4 import BeautifulSoup # $ pip install beautifulsoup4 

soup = BeautifulSoup(HTML) 
for link in soup("a", "yil-biz-ttl", href=True): 
    print(link['href']) 

Pour le moment, toutes les autres réponses ne satisfont pas aux exigences ci-dessus.