簡體   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