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?
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
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 .
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]