使用 Selenium 返回正在显示的 PDF 页面

问题描述 投票:0回答:1

我让 Selenium 从 Google 搜索中为我打开许多 pdf 文件(使用

f"https://www.google.com/search?q=filetype:pdf {search_term}"
,然后单击第一个链接)

我想知道哪些页面包含我的关键字,而无需先下载 pdf。我相信我可以用

Ctrl+F --> 关键字 --> {抓取页码} --> Tab(下一个关键字) --> {抓取页码} --> ... --> 切换到下一个 PDF

如何完成{抓取页码}部分?

背景

对于每个 PDF,我需要将这些数字作为列表或 Pandas DataFrame 或稍后我可以用来输入camelot.read_pdf() 的任何内容

这个想法是,一旦我有了这些页码,我就可以有选择地下载这些 pdf 的页面并节省存储、内存和网络速度,而不是下载和解析整个 pdf

使用美丽汤

PDF 顶部有一个灰色小框,其中包含当前页码和总页数,并且可以选择跳过 PDF。


<input data-element-focusable="true" id="pageselector" class="c0191 c0189" type="text" value="151" title="Page number (Ctrl+Alt+G)" aria-label="Go to any page between 1 and 216">

value
标签中的
input
包含我要查找的号码。

其他答案

我知道以编程方式阅读 PDF 是一项挑战,我目前正在使用此功能(使用 python 查找搜索字符串位于 pdf 文档中的哪一页)来抓取首先下载了整个 PDF 的 pdf 页面。但是 Chrome 使用 Ctrl+F 可以很快地搜索 PDF,这给了我灵感,我可以使用浏览器功能来收集这些数据,而且我已经在顶部的框中看到了这些数据。

如何在存在关键字的 PDF 中保留页码?

python selenium pdf beautifulsoup selenium-chromedriver
1个回答
1
投票

您的问题是建立在几个误解之上的,而现代浏览器掩盖其工作方式的方式并没有帮助您。

考虑这几点

  1. 在查看 4096 页的 pdf 时,我可以断开网络连接,但仍然可以端到端导航。 (只有这样,PDF 必须下载所有页面才能开始查看搜索编辑等,是的,有些页面会提前显示,但大多数需要先 100% 下载)

  2. 我可以添加注释并显示网址,但显然我没有在服务器副本上书写。下载的文件使用我的本地资源转换为文本和像素,因此我已经支付了我自己的转换副本的价格。为什么我要一遍又一遍地重复这个成本,只需保存为我自己的、可搜索的副本,这样离线 grep 就容易多了。

无论您使用哪个浏览器扩展,它们都将文件保存在您的文件系统中的某个位置,请注意这里的差异,数据显示它在网络上,但编辑消息显示否则。在这种情况下,该字段在浏览器外部是安全的,但是 Ctrl+D + C 给了我

File: https://africau.edu/images/default/sample.pdf
Created: 3/1/2006 7:28:26 AM
Application: Rave (http://www.nevrona.com/rave)
PDF Producer: Nevrona Designs
PDF Version: 1.3
File Size: 2.96 KB (3,028 Bytes)
Number of Pages: 2
Page Size: 8.5 x 11.0 in (Letter)
   
Fonts: Helvetica (Type1; Ansi)

Mozilla PDF.js 是一个不同的野兽,因此可能更容易寻址,但正如您发现的那样,您可以在 Chrome/Edge 的 index.htm 中使用混合方法,您同样可以离线执行此操作。

因此,在您抓取了 URL 列表的基础上,最简单的解决方案应该是

curl -O (or -o tmp.pdf) URL & pdftotext | find "Keyword"

您需要稍微调整一下以显示页码和行号,但这是一两个不同的问题
https://stackoverflow.com/a/72440765/10802527已被机器人删除
https://stackoverflow.com/a/72778117/10802527

© www.soinside.com 2019 - 2024. All rights reserved.