2010-10-23 19 views
3

En essayant d'analyser une liste de titres de jeux vidéo d'un site d'achat. Cependant, la liste des éléments est stockée dans une étiquette.Utilisation de SoupStrainer pour analyser sélectivement

This La section de la documentation explique supposément comment analyser seulement une partie du document mais je ne peux pas le résoudre. mon code:

from BeautifulSoup import BeautifulSoup 
import urllib 
import re 

url = "Some Shopping Site" 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 
for a in soup.findAll('a',{'title':re.compile('.+') }): 
    print a.string 

à l'heure actuelle est imprime la chaîne dans une balise qui a une référence de titre non vide. mais il est également en train de prier les articles dans la barre latérale qui sont les "spéciaux". si je ne peux que prendre la liste des produits div, je vais tuer 2 oiseaux avec une pierre.

Merci beaucoup.

Répondre

0

Essayez la recherche d'abord pour la liste des produits div puis pour les a balises avec le titre:

product = soup.find('div',{'id': 'products'}) 
for a in product.findAll('a',{'title': re.compile('.+') }): 
    print a.string 
+0

essayé mais il a donné cette erreur: Traceback (le plus récent appel dernier): Fichier "~/start.py", ligne 11, dans pour en product.findAll ('a', { 'title': re.compile ('. +')}): AttributeError: l'objet 'ResultSet' n'a pas d'attribut 'findAll' – Scraper

+0

Essayez d'appeler 'soup.find' au lieu de' soup.findAll'. – dusan

+0

pas son me donnant ceci, Traceback (dernier appel dernier): Fichier "~/src/start.py", ligne 13, en pour un dans product.findAll ('a', {'title': re .compile ('. +')}): AttributeError: l'objet 'NoneType' n'a pas d'attribut 'findAll' – Scraper

9

Oh boy suis-je bête, je cherchais des balises avec atribute id = produits, mais il aurait dû être product_list

Voici le code final si quelqu'un vient chercher.

from BeautifulSoup import BeautifulSoup, SoupStrainer 
import urllib 
import re 


start = time.clock() 
url = "http://someplace.com" 
html = urllib.urlopen(url).read() 
product = SoupStrainer('div',{'id': 'products_list'}) 
soup = BeautifulSoup(html,parseOnlyThese=product) 
for a in soup.findAll('a',{'title':re.compile('.+') }): 
     print a.string