2015-02-14 2 views
0

Я выскабливание этого URLПроблем выскабливание конкретного содержания из DIV - BeautifulSoup

Я хочу, чтобы очистить все рестораны, как так, что я получаю имя ресторана Типа кухни и часов работы в отдельных переменном, но я не знаю, как перебирать их

Вы можете видеть из ссылки, что ресторан RESTAURANT DU CASINO IVORY и LA STUB DU CASINO находятся в одном DIV div.infos-restos так, поэтому я итерация h3 с, а затем получать next_siblings, чтобы получить Type of cuisine

Вот мой код

for rests in dining_soup.select("div.infos-restos"): 

     for rest in rests.select("h3"): 
      print("   Rest Name: "+rest.text) 
      print(rest.next_sibling.next_sibling.next_sibling.next_sibling.string) 

Другой вопрос :): Line print(rest.next_sibling.next_sibling.next_sibling.next_sibling.string) печатает полный HTML. Как получить только текст?

ответ

2

Я предлагаю вам использовать lxml

BeautifulSoup доза не поддерживает xpath
На мой взгляд, его гораздо проще для извлечения данных из DOM с xpath

вот как вы это делаете:

from lxml import etree 
import requests 

url = 'http://www.accorhotels.com/gb/hotel-5548-mercure-niederbronn-hotel/restaurant.shtml' 
res = requests.get(url) 

tree = etree.HTML(res.content) 
rest_name_xpath = '//div[@class="infos-restos"]/div[@class="detail-resto"]/following-sibling::h3' 

for item in tree.xpath(rest_name_xpath): 
    print item.text 

мощность:

RESTAURANT DU CASINO IVORY 
BAR DES MACHINES A SOUS 

ps: html этого сайта плохо написан и не имеет надлежащего растрескивания. поэтому xpath длинный и уродливый

+0

upvote для 'html этого сайта плохо написан' .. У меня такое же чувство – Umair

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