À l'aide de Magnifiques Soupe de trouver de la classe spécifique
Je suis en train d'utiliser Belle Soupe pour gratter des prix des logements données de Zillow.
- Je obtenir la page web à l'id de propriété, par exemple. http://www.zillow.com/homes/for_sale/18429834_zpid/
Quand j'essaye de le find_all()
fonction, je n'obtenez pas les résultats:
results = soup.find_all('div', attrs={"class":"home-summary-row"})
Cependant, si je prends le HTML et le couper juste les bits je veux, par exemple.:
<html>
<body>
<div class=" status-icon-row for-sale-row home-summary-row">
</div>
<div class=" home-summary-row">
<span class=""> $1,342,144 </span>
</div>
</body>
</html>
- Je obtenir 2 résultats, à la fois <div>
s avec la classe home-summary-row
. Donc, ma question est, pourquoi ne puis-je pas obtenir des résultats lors de la recherche de la pleine page?
De travail exemple:
from bs4 import BeautifulSoup
import requests
zpid = "18429834"
url = "http://www.zillow.com/homes/" + zpid + "_zpid/"
response = requests.get(url)
html = response.content
#html = '<html><body><div class=" status-icon-row for-sale-row home-summary-row"></div><div class=" home-summary-row"><span class=""> $1,342,144 </span></div></body></html>'
soup = BeautifulSoup(html, "html5lib")
results = soup.find_all('div', attrs={"class":"home-summary-row"})
print(results)
OriginalL'auteur SFBA26 | 2017-01-17
Vous devez vous connecter pour publier un commentaire.
Selon la W3.org Validateur, il y a un certain nombre de questions avec le HTML comme errants balises de fermeture et les balises répartir sur plusieurs lignes. Par exemple:
Ce type de balisage peuvent rendre beaucoup plus difficile pour BeautifulSoup de parser le HTML.
Vous pourriez vouloir essayer quelque chose pour nettoyer le HTML, telles que la suppression des sauts de ligne et les espaces de fin de la fin de chaque ligne. BeautifulSoup pouvez également nettoyer le code HTML arbre pour vous:
OriginalL'auteur Soviut
Votre code HTML est non bien formé et dans ce cas, le choix de l'analyseur est crucial. Dans
BeautifulSoup
, il y a actuellement 3 disponible HTML parseurs qui travail et poignée cassée HTML différemment:html.parser
(built-in, pas de modules supplémentaires nécessaires)lxml
(le plus rapide, nécessitelxml
être installé)html5lib
(la plus grande indulgence, nécessitehtml5lib
être installé)La Les différences entre les analyseurs page de documentation décrit les différences dans plus de détails. Dans votre cas, afin de démontrer la différence:
Comme vous pouvez le voir, dans votre cas, les deux
html.parser
etlxml
faire le travail, maishtml5lib
ne pas.from bs4 import BeautifulSoup
import - j'ai vu l'autre réponse, ce qui suggèrefrom BeautifulSoup import BeautifulSoup
, ce qui n'est pas bon - c'est le BeautifulSoup la version 3 de l'import - cette version est tout à fait obsolète et non entretenu.aussi, si vous avez besoin seulement le résumé des éléments, vous pouvez utiliser
SoupStrainer
pour accélérer l'analyse et de l'analyser uniquement les éléments souhaités au lieu de l'ensemble de l'arbre.Super infos, merci
OriginalL'auteur alecxe
J'ai eu ce travail, mais il semble que quelqu'un me battre pour elle.
allez poster de toute façon.
Yep, désolé pour la faute de frappe dans la première ligne, copier & pâte d'erreur; fixe maintenant
OriginalL'auteur RobBenz