Comment utiliser les sélecteurs CSS pour récupérer des liens spécifiques couché dans un peu de classe à l'aide de BeautifulSoup?
Je suis nouveau sur le Python et je suis en apprentissage pour le raclage, je suis à l'aide de BeautifulSoup collecter des liens (j'.e href 'd'un' tag). Je suis en train de recueillir les liens sous les "ÉVÉNEMENTS à VENIR" de l'onglet du site http://allevents.in/lahore/. Je suis à l'aide de Firebug pour inspecter l'élément et pour obtenir le CSS chemin, mais ce code me renvoie rien. Je suis à la recherche pour le fixer et aussi quelques suggestions sur comment je peux choisir la bonne sélecteurs CSS pour extraire souhaitée des liens à 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')
- Vous n'avez vraiment pas besoin d'être aussi précis pour votre sélecteur, vraiment.
- Il y a un réel problème, cependant? Le code de travail, pas de travail, qu'avez-vous attendre?
- Aussi, ne pas utiliser
r.text
, utilisezr.content
ici. - Pieters, le code ne fonctionne pas.- Je attendre pour obtenir les liens de tous les événements répertoriés sous l'onglet "Événements à Venir" sur allevents.dans/lahore
- ne suis pas à l'aide de r.le contenu parce que j'ai l'intention d'extraire du texte avec des liens, mais pour le moment je suis incapable de récupérer les liens souhaités
- Vous devez laisser le contenu characterset de détection de BeautifulSoup. Vous pouvez toujours utiliser
r.text
ailleurs si vous avez besoin d'accéder à une valeur Unicode du source HTML, mais BeautifulSoup vous donnera Unicode trop, mais il fera un meilleur travail de déterminer le bon codec.
Vous devez vous connecter pour publier un commentaire.
La page n'est pas le plus sympathique dans l'utilisation des classes et de balisage, mais même si votre sélecteur CSS est trop spécifique pour être utile ici.
Si vous voulez les Événements à Venir, vous voulez juste la première
<div class="events-horizontal">
, puis il suffit de saisir le<div class="title"><a href="..."></div>
balises, donc les liens sur les titres:Notez que vous devez pas utilisation
r.text
; utilisationr.content
et de laisser le décodage en Unicode pour BeautifulSoup. Voir Problème de codage de caractères en utf-8events-horizontal
élément premier, que nous ne pouvons pas facilement en choisir qu'un avec les CSS.Vous pourriez également être intéressé par ce livre.
Ce code fonctionne très bien!!