虽然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