2010-10-23 2 views
3

Im пытается разобрать список названий видеоигр с торгового сайта. однако, поскольку список элементов хранится внутри тега.Использование SoupStrainer для синтаксического разбора

This раздел документации предположительно объясняет, как анализировать только часть документа, но я не могу его обработать. мой код:

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 

В настоящее время печатается строка внутри любого тега, у которого нет пустой ссылки на название. но он также притягивает предметы в боковой панели, которые являются «специальными». если я могу только взять список продуктов div, я убью 2 птицы одним камнем.

Большое спасибо.

ответ

0

Попробуйте найти первый в списке продуктов div, а затем для a теги с названием:

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

пробовал, но он дал эту ошибку: Traceback (самый последний вызов последнего): Файл "~/start.py", строки 11, в для в product.findAll ('а', { 'title': re.compile ('. +')}): AttributeError: объект ResultSet не имеет атрибута 'findAll' – Scraper

+0

Попробуйте вызвать 'soup.find' вместо' soup.findAll'. – dusan

+0

Не его давая мне это, Traceback (последний последний звонок): Файл «~/src/start.py», строка 13, в для a в product.findAll ('a', {'title': re .compile ('. +')}): AttributeError: объект «NoneType» не имеет атрибута «findAll» – Scraper

9

О мальчик я такой глупый, я искал тегов с atribute Ид = продуктов, но это должно было быть product_list

heres окончательный код, если кто-либо ищет.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^