python-3.x - 如何从 PDF 嵌入 HTML 的 URL 下载 PDF 文件?
问题描述
我正在尝试做的事情:我想抓取一个网页以从一个从网站加载了 javascript 的 PDF 文件中获取金融交易的金额。示例网站:http ://www.nebraskadeedsonline.us/document.aspx?g5savSPtTDnumMn1bRBWoKqN6Gu65tBhDE9%2fVs5YdPg=
当我单击“查看文档”按钮时,PDF 文件会加载到我的浏览器窗口中(我使用的是 Google Chrome)。我可以右键单击 PDF 并将其保存到我的计算机,但我想通过让 Selenium(或类似的包)下载该文件然后为 OCR 处理它来自动化该过程。
如果我能保存它,我将能够做 OCR 部分(我希望)。我只是无法保存文件。
从这里,我找到并修改了这段代码:
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 文档。我已经尝试使用 Seleniumwebdriver.find_element_by_ID('btnDocument').click()
来完成任务,它只是加载页面,但对它没有任何作用。
解决方案
requests
您可以使用和BeautifulSoup
库下载 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)
推荐阅读
- javascript - 当我在 webpack 配置中添加 css 加载器时,tinymce 突然停止工作
- python-2.7 - Tensorflow API Ubuntu 14.04 python 2.7 错误
- postgresql - 如何获取 PostgreSQL 支持的时区列表?
- c++ - 在 Windows 上的 C++ 中使用 tensorflow
- java - 如何在微服务架构中重用代码
- ruby-on-rails - RAILS - 如何添加选择标签并放置我的所有类别项目
- java - 我应该如何阅读文本文件而不得到 FileNotFoundException?
- c# - 通过 web api 运行 powershell 脚本,希望将该 api 的响应作为由 ps1 脚本生成的 excel 文件
- python - Python:在 Heroku 上运行 Instapy
- c# - 如何在 C# 中使用 libcinder?