繁体   English   中英

Python从URL抓取pdf

[英]Python scraping pdf from URL

我想从URL“ http://www.nycgo.com/venues/thalia-restaurant#menu ”中抓取文本,我感兴趣的文本位于页面的“菜单”选项卡中。 我尝试了BeautifulSoup来获取页面上的所有文本,但是以下代码的返回值缺少菜单中的所有文本。

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

当我检查菜单内容中的元素时,菜单的内容似乎是页面上html的一部分。 我确实注意到,当实际浏览页面时,菜单完全加载需要几秒钟。 不知道这是否就是上面的代码无法获取菜单内容的原因。

任何见识将不胜感激。

尽管soup.get_text() 返回HTML文档(网页)中的所有文本,但这里的问题是菜单以PDF格式嵌入页面中,Beautiful soup无法访问。 实际的PDF文件是用Javascript定义的,如下所示:

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

提取此内容的最简单方法可能是使用正则表达式。 虽然这通常是一个坏主意 ,但您在这里要查找的是非常具体的东西-文件,文件中以“ .quots”结尾的“引号”包装。 以下代码将找到并提取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")

然后使用此答案中的函数提取文本, 以回答另一个问题

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

...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM