我的目标是拥有一个访问特定网页的python脚本,在每个页面上提取所有pdf文件,这些文件在其文件名中包含某个单词,将它们转换为html / xml,然后通过html文件从中读取数据pdfs的表格。
到目前为止,我已经导入了机械化(用于浏览页面/查找pdf文件)并且我有pdfminer,但是我不确定如何在脚本中使用它来执行它在命令行上执行的相同功能。
完成任务的最有效的图书馆群是什么,您会如何建议接近每一步?如果这对于stackoverflow来说太具体了,我很抱歉,但是我在使用谷歌搜索和稀疏文档来拼凑如何编码时遇到了麻烦。谢谢!
编辑:
所以我决定在这个上使用Scrapy。到目前为止我真的很喜欢它,但现在我有了一个新问题。我已经定义了一个PDFItem()类,用于我的蜘蛛与字段title和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]
网址线运行良好,但我真的不知道如何为标题做同样的事情。我想我可以在顶部执行查询,但在选择器的末尾添加'/ text()',但这似乎过多了。有没有更好的方法来浏览链接数组中的每个链接对象并获取文本和href值?
答案 0 :(得分:1)
我会使用Scrapy。 Scrapy是抓取整个网站并生成所有PDF链接列表的最佳工具。像这样的蜘蛛很容易写。你绝对不需要Mechanize。
之后,我会使用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]
答案 1 :(得分:0)
为了从网页浏览和查找PDF链接,网址库应该足够了。正如文档所示,Mechanize
用于自动化与网站的互动。根据您的描述,我觉得没必要。
PDFMiner
的{{1}}将PDF转换为HTML。因此,您需要在脚本中调用此程序作为子流程来创建输出HTML。
因此,您需要的库是HTTP库,如Requests和PDFMiner。
您的脚本的工作流程如下:
pdf2txt.py
有关使用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)
将pdf文件另存为本地文件here的详细信息。有关将程序作为子进程运行的更多信息here