2016-01-15 3 views
1

Я хочу очистить текст по URL-адресу «http://www.nycgo.com/venues/thalia-restaurant#menu» Текст, который меня интересует, находится на вкладке «меню» на странице. Я попробовал BeautifulSoup, чтобы получить весь текст на странице, но возвращаемое значение из следующего кода пропускает весь текст в меню.Python scraping pdf от URL

html = urllib2.urlopen("http://www.nycgo.com/venues/thalia-restaurant#menu") 
html=html.read() 
soup = BS(html) 
print soup.get_text() 

кажется, что содержание меню является частью HTML на странице, когда я инспектировать элементы из содержимого меню. Я заметил, что при физическом просмотре страницы для полного загрузки меню требуется несколько секунд. Не уверен, что поэтому код выше не позволяет получить содержимое меню.

Любое понимание будет оценено по достоинству.

+0

Если нет каких-либо особых причин этого * * должен быть выполнен с использованием скрипта Python, я бы предложил использовать [wkhtmltopdf] (http://wkhtmltopdf.org/). – amphetamachine

+0

Содержимое страницы динамически загружается с помощью Javascript. Вы не сможете получить весь контент, просто загрузив текст HTML. – jumbopap

+0

@jumbopap спасибо, у меня было подозрение, что что-то вроде этого может быть причиной того, что возвращаемое значение пропускает содержимое меню. Любое предложение, как с этим бороться? – Camuslu

ответ

3

Хотя soup.get_text()будет вернуть весь текст из HTML-документа (веб-страницы) проблема здесь заключается в том, что меню встраивается в страницу как PDF, который Красивый суп не может получить доступ. Фактический файл PDF определяется в Javascript Как и следующим образом:

{ 
    name: "menu", 
    show: Boolean(1), 
    url: "/assets/files/programs/rw/2016W/thalia-restaurant.pdf" 
} 

Самый простой способ извлечь это, то, вероятно, использовать регулярные выражения. Хотя это вообще плохая идея, здесь вы ищете очень конкретную вещь - файл, завернутый в «кавычки», заканчивающийся на .pdf. Следующий код будет найти, что и извлечь URL:

import re 
from urllib import urlopen 

html = urlopen("http://www.nycgo.com/venues/thalia-restaurant#menu") 
html_doc = html.read() 

match = re.search(b'\"(.*?\.pdf)\"', html_doc) 
pdf_url = "http://www.nycgo.com" + match.group(1).decode('utf8') 

Сейчас pdf_url является:

u'http://www.nycgo.com/assets/files/programs/rw/2016W/thalia-restaurant.pdf' 

Однако извлечение текста из PDF немного сложнее. Вы можете скачать файл: первый

from urllib import urlretrieve 
urlretrieve(pdf_url, "download.pdf") 

Затем извлечь текст, как описано с помощью функции in this answer to another question:

text = convert_pdf_to_txt("download.pdf") 
print(text) 

возвращений:

NEW YOUR CITY 
RESTAURANT WEEK 

WINTER 2016 

MONDAY - FRIDAY 
828 Eighth Avenue 
New York City, 10019 

Tel: 212.399.4444 

www.restaurantthalia.com 

LUNCH $25 
FIRST COURSE 
CREAMY POLENTA 
fricassee of truffle mushrooms 

... 
+0

Это работает очень красиво, спасибо, сэр! – Camuslu