Extraire image lien avec Beautiful Soup

Extraire image lien avec Beautiful Soup - Python - Programmation

Marsh Posté le 05-06-2023 à 21:52:53    

Bonjour
J'ai trouvé comment extraire le texte d'un lien  
exemple  
<a href="tuttut">TEXTE</a>
me renvoie "TEXTE"
 
Je voudrais extraire une image sur le même principe
exemple
<a href="tuttut"><img src="photo.jpg"></a>
devrait me renvoyer
"photo.jpg"
 
Seulement, ça ne renvoie rien...
Avez-vous la solution ?
 

Code :
  1. data = page.text
  2.                         soup = BeautifulSoup(data, features="html.parser" )
  3.                      
  4.                         for link_brut in soup.find_all('a'):
  5.                             link = link_brut.get('href')
  6.                             texte = link_brut.text


J'ai trouvé ce code que j'ai ajouté entre la 2eme et la 3eme lignes mais rien ne se passe

Code :
  1. data = page.text
  2.                         soup = BeautifulSoup(data, features="html.parser" )
  3.                         image_links = [x['data-img'] for x in soup.find_all('a', rel='popover')]
  4.                         for link in image_links:
  5.                             print(link)


---------------
http://www.ypikay.com
Reply

Marsh Posté le 05-06-2023 à 21:52:53   

Reply

Marsh Posté le 12-06-2023 à 11:26:44    

Je sais que ça ne se fait pas mais ....
Personne n'a un bout de code SVP ?


---------------
http://www.ypikay.com
Reply

Marsh Posté le 12-06-2023 à 12:09:00    

J'ai pas forcement tout compris mais dans ton premier code tu utilises un parser pour récupérer toutes les balises <a /> et en extraire le lien href et le contenu textuel.
 
Par contre dans le 2eme (je ne connais pas BeautifulSoup mais on peut essayer de deviner), on dirait que tu prend toutes les balises ayant un attribut data-img (image_links = [x['data-img']) et qu'en suite tu boucles sur ces "noeuds" pour trouver des enfants <a /> ayant l'attribut rel='popover' (for x in soup.find_all('a', rel='popover')]).
Clairement, tout ça ne vas pas t'aider à trouver la valeur d'attribut "src" dans des <img />
 
Encore une fois plutôt que copier / coller des fragments de code essaye de comprendre la logique des sélecteurs et des boucles dans BeautifulSoup.
 
J’imagine que pour cibler des <img /> dans des <a /> tu dois pouvoir faire un truc du genre :

Code :
  1. data = page.text
  2. soup = BeautifulSoup(data, features="html.parser" )
  3. for link_brut in soup.find_all('a'):
  4.     for img_brut in link_brut.find_all('img'):
  5.         src= img_brut.get('src')


Message édité par mechkurt le 12-06-2023 à 12:33:57

---------------
D3
Reply

Marsh Posté le 13-06-2023 à 14:50:04    

oui j'ai testé mais il ne me renvoie strictement rien d'où ma question !


---------------
http://www.ypikay.com
Reply

Marsh Posté le 13-06-2023 à 16:33:29    

Je connais peu Python et pas du tout BeautifulSoup, probable que le retour d’itération de ta première boucle n'a pas de méthodes pour filtrer comme la 2eme ?
Tu affiche les erreurs et aucun message pertinent ne t’aiguille sur une solution ?
Et quid de faire des print a chaque tout de boucle pour voir ce qu'il en est ?

Code :
  1. import lxml
  2. import requests
  3. from bs4 import BeautifulSoup
  4. from selenium import webdriver
  5. def test():
  6.     url = "https://asheville.craigslist.org/search/fua"
  7.     driver = webdriver.Firefox()
  8.     driver.get(url)
  9.     html = driver.page_source.encode('utf-8')
  10.     soup = BeautifulSoup(html, "lxml" )
  11.     for post in soup.find_all('li', "result-row" ):
  12.         for post_content in post.find_all("a", "result-image gallery" ):
  13.             print(post_content['href'])
  14.             for pic in post_content.find_all("img" ):
  15.                 print(pic['src'])


https://stackoverflow.com/questions [...] lsoup?rq=3


---------------
D3
Reply

Marsh Posté le 24-06-2023 à 11:44:45    

Ca semble assez clair, au vu de ce que tu as posté :

Code :
  1. data = page.text
  2. soup = BeautifulSoup(data, features="html.parser" )
  3. for image in soup.find_all('img'):
  4.      source = image.get('src')
  5.      texte = source.text


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed