雖然soup.get_text()
將從HTML文件(網頁)返回的所有文字,這裏的問題是,菜單嵌入在頁面的PDF,這美麗的湯無法訪問。實際的PDF文件,在Javascript等被定義如下:
{
name: "menu",
show: Boolean(1),
url: "/assets/files/programs/rw/2016W/thalia-restaurant.pdf"
}
提取這種這時最簡單的方法可能是使用正則表達式。雖然這通常是一個壞主意,在這裏你正在尋找一個非常具體的事情 - 一個文件,包裹在「報價」結尾.pdf。下面的代碼會發現並提取網址:
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文本有點麻煩。
text = convert_pdf_to_txt("download.pdf")
print(text)
返回:作爲使用功能in this answer to another question描述
from urllib import urlretrieve
urlretrieve(pdf_url, "download.pdf")
然後將解壓後的文本:您可以下載該文件第一
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
...
如果沒有什麼特殊的原因,這個* *使用Python腳本完成,我建議使用[wkhtmltopdf](http://wkhtmltopdf.org/)。 – amphetamachine
該頁面的內容是用Javascript動態加載的。您不能簡單地通過下載HTML文本來獲取所有內容。 – jumbopap
@ jumbopap謝謝,我懷疑類似的東西可能是返回值錯過菜單內容的原因。任何建議如何處理這個? – Camuslu