在Python中将pdf转换为text/html以便我可以解析它

2024-02-14

我有以下示例代码,我从欧洲议会网站下载了有关给定立法提案的 pdf 文件:

编辑:我最终得到了链接并将其提供给 adobes 在线转换工具(请参阅下面的代码):

import mechanize
import urllib2
import re
from BeautifulSoup import *

adobe = "http://www.adobe.com/products/acrobat/access_onlinetools.html"

url = "http://www.europarl.europa.eu/oeil/search_reference_procedure.jsp"

def get_pdf(soup2):
    link = soup2.findAll("a", "com_acronym")
    new_link = []
    amendments = []
    for i in link:
        if "REPORT" in i["href"]:
            new_link.append(i["href"])
    if new_link == None:
        print "No A number"
    else:
        for i in new_link:
            page = br.open(str(i)).read()
            bs = BeautifulSoup(page)
            text = bs.findAll("a")
            for i in text:
                if re.search("PDF", str(i)) != None:
                    pdf_link = "http://www.europarl.europa.eu/" + i["href"]
            pdf = urllib2.urlopen(pdf_link)
            name_pdf = "%s_%s.pdf" % (y,p)
            localfile = open(name_pdf, "w")
            localfile.write(pdf.read())
            localfile.close()

            br.open(adobe)
            br.select_form(name = "convertFrm")
            br.form["srcPdfUrl"] = str(pdf_link)
            br["convertTo"] = ["html"]
            br["visuallyImpaired"] = ["notcompatible"]
            br.form["platform"] =["Macintosh"]
            pdf_html = br.submit()

            soup = BeautifulSoup(pdf_html)


page = range(1,2) #can be set to 400 to get every document for a given year
year = range(1999,2000) #can be set to 2011 to get documents from all years

for y in year:
    for p in page:
        br = mechanize.Browser()
        br.open(url)
        br.select_form(name = "byReferenceForm")
        br.form["year"] = str(y)
        br.form["sequence"] = str(p)
        response = br.submit()
        soup1 = BeautifulSoup(response)
        test = soup1.find(text="No search result")
        if test != None:
            print "%s %s No page skipping..." % (y,p)
        else:
            print "%s %s  Writing dossier..." % (y,p)
            for i in br.links(url_regex="file.jsp"):
                link = i
            response2 = br.follow_link(link).read()
            soup2 = BeautifulSoup(response2)
            get_pdf(soup2)

在 get_pdf() 函数中,我想将 pdf 文件转换为 python 中的文本,以便我可以解析文本以获取有关立法程序的信息。谁能解释一下这是怎么做到的?

Thomas


听起来你找到了一个解决方案,但如果你想在没有网络服务的情况下做到这一点,或者你需要根据 PDF 页面上的精确位置来抓取数据,我可以建议我的库吗?pdfquery https://github.com/jcushman/pdfquery?它基本上将 PDF 转换为 lxml 树,可以将其输出为 XML,或者使用 XPath、PyQuery 或任何您想要使用的其他内容进行解析。

要使用它,一旦将文件保存到磁盘,您将返回pdf = pdfquery.PDFQuery(name_pdf),或者如果不需要保存则直接传入一个urllib文件对象。要使用 BeautifulSoup 获取 XML 进行解析,您可以这样做pdf.tree.tostring().

如果您不介意使用 JQuery 风格的选择器,可以使用带有位置扩展的 PyQuery 接口,这会非常方便。例如:

balance = pdf.pq(':contains("Your balance is")').text()
strings_near_the_bottom_of_page_23 = [el.text for el in pdf.pq('LTPage[page_label=23] :in_bbox(0, 0, 600, 200)')]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中将pdf转换为text/html以便我可以解析它 的相关文章

随机推荐

  • 如何为班级中的所有测试设置测试类别

    我在用MSTest https en wikipedia org wiki MSTest 并且我想一次为测试类中的所有方法设置相同的测试类别 而不需要单独为每个方法设置 TestCategory 属性 如何才能做到这一点 最方便 最明显的方
  • 如何将 UIColor 转换为十六进制字符串?

    我有一个项目 需要将 UIColor 的 RGBA 值作为 8 个字符的十六进制字符串存储在数据库中 例如 UIColor blueColor 将为 0000FFFF 我知道我可以像这样获取组件值 CGFloat r g b a color
  • Facebook 广告 API - 批量请求定位搜索

    问题 我在提交 Facebook Ads API 的批量请求时遇到问题 我想知道是否有人可以提供有关以下错误的见解 我尝试获取艺术家列表 在这个简化示例中仅列出 50 名 然后针对这些艺术家提交 TargetingSearch 请求 但是
  • Hadoop put 性能 - 大文件(20GB)

    我正在使用 hdfs put 将一个 20GB 的大文件加载到 hdfs 中 目前该过程运行 4 分钟 我正在尝试缩短将数据加载到 hdfs 的写入时间 我尝试利用不同的块大小来提高写入速度 但得到以下结果 512M blocksize 4
  • Chrome 加载第一个 AJAX 响应速度很慢

    我正在使用 React 和 Flux 构建一个应用程序 单击项目列表会启动一个操作 然后使用以下命令启动 通过效果 AJAX 请求axios 虽然我已经尝试过superagent bluebird promise具有相同的结果 问题是 使用
  • 如何杀死 iPhone 中后台运行的应用程序?

    我只是想知道如何杀死 iPhone 中的后台进程 应用程序 就像在 Auto Lock SBSettings 中一样 进程 切换能够列出所有后台进程并允许用户杀死其中的任何进程 提前致谢 感谢 refulgentis Chuck 的快速回复
  • 设置 BOOL 属性的正确方法

    我想在类初始值设定项中设置一个 BOOL 属性 property assign nonatomic BOOL isEditMode id init self setValue NO forKey isEditMode return self
  • 如何隐藏 Chrome“在调试器中暂停”覆盖层?

    Chrome 的一些半新更新现在在断点处暂停时在我的网页上放置了一个叠加层 此时 我特别尝试查看页面标记的状态 而叠加层正好隐藏了我想要看到的内容 有没有办法关闭这个标记 或者有没有办法将 Chrome 恢复到没有此错误功能的版本 现在 I
  • 放置Database.SetInitializer的地方

    我正在开发一个项目 该项目最终可能会出现多个 UI 版本 变体 但到目前为止 我的解决方案 Web 中有两个子项目 包含带有 ASP NET MVC 的 Web 界面 服务项目是我定义数据库上下文和模型的地方 我的目标是在我的 Web 项目
  • iPhone:键盘挡住屏幕[重复]

    这个问题在这里已经有答案了 可能的重复 UITableView和键盘滚动问题 https stackoverflow com questions 594181 uitableview and keyboard scrolling issue
  • 相当于 Matlab 的“randsample”随机样本

    Java中有没有类似的函数randsample在Matlab中 它可以返回加权样本 随机均匀采样并放回 并且具有权重 w i 对于每个数字 选择数字 i 的概率是 w i sum w 我想用这样的东西 randsample 0 1 1 tr
  • 如何将 Vuetify 选项卡与 vue-router 一起使用

    我有以下内容jsfiddle https jsfiddle net jjloneman e5a6L27u 12 有两个 Vuetify 选项卡 该文档没有显示使用示例vue router跟他们 我找到了这个Medium com 帖子 htt
  • Docker Rails mysql 未连接

    我正在尝试将主机上的 Rails 应用程序连接到 docker mysql 映像 但我收到此错误 Authentication plugin caching sha2 password cannot be loaded dlopen usr
  • 如何使用 Python 将新列附加到 CSV 文件? [复制]

    这个问题在这里已经有答案了 我在一个数组中存储了一组四个数字 我想将其添加到 分数 列下的 CSV 文件中 with open Player csv ab as csvfile fieldnames Score writer csv Dic
  • 有没有办法可以从包含代码的字符串动态定义谓词主体?

    这可能是一个愚蠢的问题 但就这样吧 我希望能够从数据库 VARCHAR 列或任何字符串解析的字符串动态构造谓词 例如 假设数据库中的列包含以下字符串 return e SomeStringProperty Contains foo 这些代码
  • MySQL 存储函数创建错误 ERROR 1064 & 1327

    我正在使用 MySQL v5 1 36 我正在尝试使用此代码创建一个存储函数 DELIMITER CREATE FUNCTION modx getSTID x VARCHAR 255 RETURNS INT DETERMINISTIC BE
  • 为视图控制器设置插座/操作

    我有一个UIButton在不是我的应用程序中的根视图控制器的视图控制器中 我无法在头文件中拖动并为其创建插座或操作 我只能从根视图控制器执行此操作 这有一个简单的原因吗 使用故事板时 XCode 仅为第一个视图控制器 名为 ViewCont
  • CSS 同步转换

    您好 有一个在 hover 上打开的菜单 当我将鼠标悬停到下一个元素时 它会等待一会儿 我希望两个过渡同时产生手风琴效果 我缺少什么 Fiddle http jsfiddle net jSBf3 css ul border 2px soli
  • 全屏查看 ionic 移动应用程序

    我有一个离子移动应用程序 我在移动浏览器上运行 它有一个静态标头 即使向下滚动 我也需要隐藏该网络应用程序的地址栏 但这不会发生 它有一个标题如下 它在本机移动浏览器上运行 我使用控制台构建了应用程序 所以请帮助我隐藏地址 标题栏并像 Fa
  • 在Python中将pdf转换为text/html以便我可以解析它

    我有以下示例代码 我从欧洲议会网站下载了有关给定立法提案的 pdf 文件 编辑 我最终得到了链接并将其提供给 adobes 在线转换工具 请参阅下面的代码 import mechanize import urllib2 import re