如何从将PDF嵌入HTML的URL下载PDF文件?

时间:2019-02-20 19:23:26

标签: python-3.x selenium pdf web-scraping

我要做什么::我想抓取网页,以从网站上加载了javascript的PDF文件中获取财务交易金额。示例网站:http://www.nebraskadeedsonline.us/document.aspx?g5savSPtTDnumMn1bRBWoKqN6Gu65tBhDE9%2fVs5YdPg=

当我单击“查看文档”按钮时,PDF文件会加载到浏览器窗口中(我使用的是Google Chrome)。我可以右键单击PDF并将其保存到计算机上,但是我想通过让Selenium(或类似软件包)下载该文件然后对其进行OCR处理来自动化该过程。

如果我可以保存它,我将可以做OCR零件(希望如此)。我只是无法保存文件。

here中,我找到并修改了以下代码:

select NewMobile =  case when mobile not like '0%' and LEN(mobile) IN (9, 10) then '0' else '' end + mobile
from tab

但是它不起作用。我的大学教授曾经说过:“如果您在这个问题上花了两个多小时而又没有取得进展,那么该是时候在其他地方寻求帮助了。”所以我正在寻求帮助。

其他信息:上面的链接会将您带到网页,但是只有单击“查看文档”按钮,您才能访问PDF文档。我尝试使用Selenium的def download_pdf(lnk): from selenium import webdriver from time import sleep options = webdriver.ChromeOptions() download_folder = "C:\\Users\\rickc\\Documents\\Scraper2\\screenshots\\" profile = {"plugins.plugins_list": [{"enabled": False, "name": "Chrome PDF Viewer"}], "download.default_directory": download_folder, "download.extensions_to_open": ""} options.add_experimental_option("prefs", profile) print("Downloading file from link: {}".format(lnk)) driver = webdriver.Chrome(chrome_options = options) driver.get(lnk) filename = lnk.split("/")[3].split(".aspx")[0]+".pdf" print("File: {}".format(filename)) print("Status: Download Complete.") print("Folder: {}".format(download_folder)) driver.close() download_pdf('http://www.nebraskadeedsonline.us/document.aspx?g5savSPtTDnumMn1bRBWoKqN6Gu65tBhDE9fVs5YdPg=') 来使事情发生,它只是加载页面,但对此不做任何事情。

1 个答案:

答案 0 :(得分:2)

您可以使用requestsBeautifulSoup库下载pdf。在下面的代码中,将/Users/../aaa.pdf替换为将下载文档的完整路径:

import requests
from bs4 import BeautifulSoup

url = 'http://www.nebraskadeedsonline.us/document.aspx?g5savSPtTDnumMn1bRBWoKqN6Gu65tBhDE9%2fVs5YdPg='

response = requests.post(url)
page = BeautifulSoup(response.text, "html.parser")

VIEWSTATE = page.select_one("#__VIEWSTATE").attrs["value"]
VIEWSTATEGENERATOR = page.select_one("#__VIEWSTATEGENERATOR").attrs["value"]
EVENTVALIDATION = page.select_one("#__EVENTVALIDATION").attrs["value"]
btnDocument = page.select_one("[name=btnDocument]").attrs["value"]

data = {
  '__VIEWSTATE': VIEWSTATE,
  '__VIEWSTATEGENERATOR': VIEWSTATEGENERATOR,
  '__EVENTVALIDATION': EVENTVALIDATION,
  'btnDocument': btnDocument
}
response = requests.post(url, data=data)
with open('/Users/../aaa.pdf', 'wb') as f:
    f.write(response.content)