0

我的目标是拥有一个可以访问特定网页的 python 脚本,提取每个页面上文件名中包含特定单词的所有 pdf 文件,将它们转换为 html/xml,然后通过 html 文件从 pdf 中读取数据表。

到目前为止,我已经导入了 mechanize(用于浏览页面/查找 pdf 文件)并且我有 pdfminer,但是我不确定如何在脚本中使用它来执行它在命令行上执行的相同功能。

完成我的任务最有效的库组是什么,您建议如何处理每个步骤?如果这对于stackoverflow来说太具体了,我深表歉意,但是我在使用谷歌搜索和稀疏文档来拼凑如何编写代码时遇到了麻烦。谢谢!


编辑:所以我决定在这个上使用 Scrapy。到目前为止我真的很喜欢它,但现在我有一个新问题。我已经定义了一个 PDFItem() 类以与我的蜘蛛一起使用,其中包含字段标题和 url。我有一个选择器,它可以抓取我想要的所有链接,我想浏览这些链接并为每个链接创建一个 PDFItem。这是我下面的代码:

links = sel.xpath('//a[contains(@href, "enforcementactions.pdf") and contains(@class, "titlelink")]')
item = PDFItem()
for link in links:
        item['title'] = link.xpath('/text()')
        item['url'] = URL + link.xpath('@href').extract()[0]

url 行效果很好,但我真的不知道如何为标题做同样的事情。我想我可以只在顶部执行查询,但在选择器的末尾添加“/text()”,但这似乎过分了。有没有更好的方法来遍历链接数组中的每个链接对象并获取文本和 href 值?

4

2 回答 2

1

我会使用Scrapy。Scrapy 是抓取整个网站并生成所有 PDF 链接列表的最佳工具。像这样的蜘蛛很容易编写。你绝对不需要机械化。

之后,我会使用Poppler将每个 PDF 转换为 HTML。它不是 Python 模块,但您可以使用命令pdftohtml. 根据我的经验,Poppler 比 PDFMiner 的结果更好。

编辑:

links = sel.xpath('//a[contains(@href, "enforcementactions.pdf") and contains(@class, "titlelink")]')
for link in links:
    item = PDFItem()
    item['title'] = link.xpath('text()').extract()[0]
    item['url'] = URL + link.xpath('@href').extract()[0]
于 2014-02-18T22:21:18.297 回答
0

为了从网页浏览和查找 PDF 链接,一个 url 库就足够了。Mechanize,正如它的文档所暗示的那样,用于自动化与网站的交互。鉴于你的描述,我觉得没有必要。

PDFMiner's将pdf2txt.pyPDF 转换为 HTML。因此,您需要将此程序作为脚本中的子进程调用以创建输出 HTML。

因此,您需要的库是 HTTP 库,例如Requests和 PDFMiner。

您的脚本的工作流程将类似于:

import os
import requests
from subprocess import Popen

...
r = requests.get(<url-which-has-pdf-links>)
# Do a search for pdf links in r.text
...
for pdf_url in pdf_links:
    # get the PDF content and save it to a local temp file
...
# Build the command line parameters, the way pdf2txt expects
# Invoke the PDFMiner's pdf2txt on the created file as a subprocess
Popen(cmd)

有关使用Requests将 pdf 文件保存为本地文件的更多信息,请点击此处有关在此处将程序作为子进程运行的更多信息

于 2014-02-18T22:04:27.940 回答