2016-12-05 1 views
0

Désolé s'il s'agit d'une question stupide. J'essaie d'utiliser Beautifulsoup et urllib2 en python pour regarder une URL et extraire toutes les divs avec une classe particulière. Cependant, le résultat est toujours vide même si je peux voir les divs quand je "inspecte l'élément" dans les outils de développement de chrome.Web scraping pour les divs insérés par des scripts

J'ai regardé la source de la page et ces div n'étaient pas là ce qui signifie qu'ils ont été insérés par un script. Donc ma question est de savoir comment puis-je rechercher ces divs (en utilisant leur nom de classe) en utilisant BeautifulSoup? Je veux éventuellement lire et suivre hrefs sous ces divs.

Merci.

[Modifier] Je suis actuellement à la H & M site: http://www.hm.com/sg/products/ladies et je suis intéressé à obtenir tous les divs avec la classe « produit list-item »

+0

Pouvez-vous envoyer l'URL que vous essayez de gratter pour vérifier si elle utilise javascript – Wonka

Répondre

0

Essayez d'utiliser le sélénium pour exécuter le javascript

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("http://www.python.org") 
html = driver.page_source 
0

vérifier ce lien enter link description here

vous pouvez obtenir toutes les informations par le changement de l'URL, ce lien se trouve dans outils de développement chrome> Réseau

0

La raison pour laquelle vous n'avez rien obtenu de cette URL spécifique est simplement parce que, l'information dont vous avez besoin n'est pas là. Alors, laissez-moi d'abord expliquer un peu comment cette page est chargée dans un navigateur: lorsque vous demandez cette page (http://www.hm.com/sg/products/ladies), le contenu littéral sera retourné dans la première phase (ce qui est ce que vous avez obtenu de votre requête urllib2), puis le navigateur commence à lire/analyser le contenu, il indique au navigateur où trouver toutes les informations dont il a besoin pour afficher toute la page (par exemple CSS pour contrôler la mise en page, javascript/urls/pages etc), et le navigateur fait tout cela derrière la scène. Lorsque vous "inspectez élément" en chrome, la page est déjà entièrement chargée, et ces informations ne sont pas dans l'URL d'origine, vous devez donc savoir quelle URL est utilisée pour remplir ces zones et aller à la place de cette URL spécifique. Maintenant, nous avons besoin de savoir ce qui se passe derrière la scène, et un outil est nécessaire pour capturer tout le trafic lorsque cette page se charge (je recommande fiddler).

traffic captured by fiddler

Comme vous pouvez le voir, beaucoup de choses se passent lorsque vous ouvrez cette page dans un navigateur! (Et c'est seulement une partie de l'ensemble du processus de chargement de la page) Ainsi par supposition, les informations dont vous avez besoin si être dans l'une de ces trois demandes "api.hm.com", et la meilleure partie est qu'ils sont déjà formatés JSON, ce qui signifie que vous ne pourriez même pas embêter avec BeautifulSoup, le module intégré json pourrait faire le travail!

OK, maintenant quoi? Utilisez urllib2 pour simuler ces demandes et obtenir ce que vous voulez.

P.S. requests est un excellent outil pour ce genre de travail, vous pouvez l'obtenir here.

0

Essayons:

from bs4 import BeautifulSoup 
import urllib2 
page = urllib2.urlopen("http://www.hm.com/sg/products/ladies") 

soup = BeautifulSoup(page.read(),'lxml') 

scrapdiv = open('scrapdiv.txt','w') 

product_lists = soup.findAll("div",{"class":"o-product-list"}) 
print product_lists 
for product_list in product_lists: 
    print product_list 
    scrapdiv.write(str(product_list)) 
    scrapdiv.write("\n\n") 
scrapdiv.close()