【问题标题】:How can I download a PDF file from an URL where the PDF is embedded into the HTML?如何从 PDF 嵌入 HTML 的 URL 下载 PDF 文件?
【发布时间】:2019-07-14 14:02:26
【问题描述】:

我正在尝试做的事情:我想抓取一个网页,以从一个从网站加载了 javascript 的 PDF 文件中获取金融交易的金额。示例网站:http://www.nebraskadeedsonline.us/document.aspx?g5savSPtTDnumMn1bRBWoKqN6Gu65tBhDE9%2fVs5YdPg=

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

如果我可以保存它,我将能够进行 OCR 部分(我希望如此)。我就是无法保存文件。

here,我找到并修改了这段代码:

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=')

但它不起作用。我的老大学教授曾经说过,“如果你在这个问题上花费了两个多小时,还没有取得进展,那就该到别处寻求帮助了。”所以我正在寻求帮助。

其他信息:上面的链接会将您带到一个网页,但您必须单击“查看文档”按钮才能访问 PDF 文档。我已经尝试使用 Selenium 的 webdriver.find_element_by_ID('btnDocument').click() 来实现,它只是加载页面但不做任何事情。

【问题讨论】:

  • 这比你想象的还要糟糕。该 PDF 本质上是图像的容器。要从中获取任何有意义的信息,您必须对其进行 OCR。
  • 如何下载pdf文件可以找here
  • @Sers -- 根据您提供的链接,我将代码修改为如下所示:profile = {"plugins.plugins_list": [{"enabled": False, "name": "Chrome PDF Viewer"}], "plugins.always_open_pdf_externally": True, "download.default_directory": download_folder, "download.extensions_to_open": ""} 但这也不是问题所在。我只是错过了什么吗?

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


【解决方案1】:

您可以使用 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)

【讨论】:

  • 这就是魔法!谢谢@Sers!我不确定我是否完全理解您那里的代码,但它对我有用,因此我现在可以打开 PDF 并使用另一个模块扫描美元符号并获得我需要的金额。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 2020-11-04
  • 2014-11-14
  • 1970-01-01
  • 2022-10-15
  • 2019-12-16
  • 1970-01-01
  • 2020-11-14
相关资源
最近更新 更多