web-dev-qa-db-fra.com

Obtenir tous les liens d'une page Belle soupe

J'utilise beautifulsoup pour obtenir tous les liens d'une page. Mon code est:

import requests
from bs4 import BeautifulSoup


url = 'http://www.acontecaeventos.com.br/marketing-promocional-sao-paulo'
r = requests.get(url)
html_content = r.text
soup = BeautifulSoup(html_content, 'lxml')

soup.find_all('href')

Tout ce que je reçois est:

[]

Comment puis-je obtenir une liste de tous les liens href sur cette page?

11
user1922364

Vous dites au find_all méthode pour trouver les balises href, pas attributs.

Vous devez trouver le <a> tags, ils sont utilisés pour représenter les éléments de lien.

links = soup.find_all('a')

Plus tard, vous pouvez accéder à leurs attributs href comme ceci:

link = links[0]          # get the first link in the entire page
url  = link['href']      # get value of the href attribute
url  = link.get('href')  # or like this
13
Anonta

Remplacez votre dernière ligne:

links = soup.find_all('a')

Par cette ligne:

links = [a.get('href') for a in soup.find_all('a', href=True)]

Il supprimera toutes les balises a et pour chaque balise a, il ajoutera l'attribut href à la liste des liens.

Si vous voulez en savoir plus sur la boucle for entre le [], lire Liste des compréhensions .

9
wbwlkr

Pour obtenir une liste de chaque href quelle que soit l'utilisation des balises:

href_tags = soup.find_all(href=True)   
hrefs = [tag.get('href') for tag in href_tags]
0
Oliver Oliver