Je suis nouveau sur Python et je l'apprends à des fins de scraping J'utilise BeautifulSoup pour collecter des liens (ie href de la balise 'a'). J'essaye de collecter les liens sous le "UPCOMING" Onglet EVENTS "du site http://allevents.in/lahore/ . J'utilise Firebug pour inspecter l'élément et obtenir le chemin CSS mais ce code ne me renvoie rien. Je cherche le correctif et aussi quelques suggestions sur la façon de choisir les sélecteurs CSS appropriés pour récupérer les liens souhaités à partir de n'importe quel site. J'ai écrit ce morceau de code:
from bs4 import BeautifulSoup
import requests
url = "http://allevents.in/lahore/"
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data)
for link in soup.select( 'html body div.non-overlay.gray-trans-back div.container div.row div.span8 div#eh-1748056798.events-horizontal div.eh-container.row ul.eh-slider li.h-item div.h-meta div.title a[href]'):
print link.get('href')
La page n'est pas la plus conviviale dans l'utilisation des classes et du balisage, mais même ainsi, votre sélecteur CSS est trop spécifique pour être utile ici.
Si vous voulez des événements à venir, vous voulez juste le premier <div class="events-horizontal">
, puis saisissez simplement le <div class="title"><a href="..."></div>
tags, donc les liens sur les titres:
upcoming_events_div = soup.select_one('div#events-horizontal')
for link in upcoming_events_div.select('div.title a[href]'):
print link['href']
Notez que vous ne devez pas utiliser r.text
; utilisation r.content
et laisser le décodage à Unicode à BeautifulSoup. Voir Problème d'encodage d'un caractère dans utf-8
soup.select('div')
All elements named <div>
soup.select('#author')
The element with an id attribute of author
soup.select('.notice')
All elements that use a CSS class attribute named notice
soup.select('div span')
All elements named <span> that are within an element named <div>
soup.select('div > span')
All elements named <span> that are directly within an element named <div>, with no other element in between
soup.select('input[name]')
All elements named <input> that have a name attribute with any value
soup.select('input[type="button"]')
All elements named <input> that have an attribute named type with value button
Vous pouvez également être intéressé par ce livre .
import bs4 , requests
res = requests.get("http://allevents.in/lahore/")
soup = bs4.BeautifulSoup(res.text)
for link in soup.select('a[property="schema:url"]'):
print link.get('href')
Ce code fonctionnera bien !!