【问题标题】:Convert eurostat table of contents PDF to JSON将 Eurostat 目录 PDF 转换为 JSON
【发布时间】:2021-12-31 05:47:54
【问题描述】:

由于 EUROSTAT 数据没有可访问的 API,因此应手动创建每个查询我发现 this table of contents 并且我想将其提取为可搜索的 JSON。文件中有节标题,每个叶子有3个链接,但是如何将链接和标题和节连接成JSON?

我有这个基本代码:

PDFFile = open("table_of_contents_en.pdf",'rb')

PDF = PyPDF2.PdfFileReader(PDFFile)
pages = PDF.getNumPages()
key = '/Annots'
uri = '/URI'
ank = '/A'

for page in range(1,2):
    print("Current Page: {}".format(page))
    pageSliced = PDF.getPage(page)
    pageObject = pageSliced.getObject()
    if key in pageObject.keys():
        ann = pageObject[key]
        for a in ann:
            u = a.getObject()
            if uri in u[ank].keys():
                print(u[ank][uri])

这是文本:

pdfFileObj = open('table_of_contents_en.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
print(pdfReader.numPages)
pageObj = pdfReader.getPage(0)
print(pageObj.extractText())
pdfFileObj.close()

这用于下载 zip:

for page in range(1,2):
    print("Current Page: {}".format(page))
    pageSliced = PDF.getPage(page)
    pageObject = pageSliced.getObject()
    if key in pageObject.keys():
        ann = pageObject[key]
        for a in ann:
            u = a.getObject()
            if uri in u[ank].keys():
                print(u[ank][uri])
            if str(u[ank].keys()).find(".tsv.gz") != -1 :
                url = str(u[ank].keys())
                r = requests.get(url, allow_redirects=True)
                print(str(str(str(u[ank].keys()).split("/")[-1]).split(".")[0])
                open(str(str(str(u[ank].keys()).split("/")[-1]).split(".")[0]), 'wb').write(r.content)

但我怎样才能在某些结构化数据中同时正确地做到这一点?

【问题讨论】:

    标签: python json database pdf


    【解决方案1】:

    试试这样,这不会是JSON,但是可以转换文件夹中的文件列表,这里是如何获取文件:

    import PyPDF2
    import requests
    
    PDFFile = open("table_of_contents_en.pdf",'rb')
    
    PDF = PyPDF2.PdfFileReader(PDFFile)
    pages = PDF.getNumPages()
    key = '/Annots'
    uri = '/URI'
    ank = '/A'
    
    for page in range(pages):
        print("Current Page: {}".format(page))
        pageSliced = PDF.getPage(page)
        pageObject = pageSliced.getObject()
        if key in pageObject.keys():
            ann = pageObject[key]
            for a in ann:
                u = a.getObject()
                # if uri in u[ank].keys():
                #   print(u[ank][uri])
                if str(u[ank][uri]).find(".tsv.gz") != -1 :
                    url = str(u[ank][uri])
                    try:
                        r = requests.get(url, allow_redirects=True)
                        print(str(str(str(url).split("/")[-1]).split(".")[0]))
                        open(str(str(url).split("/")[-1]), 'wb').write(r.content)
                    except:
                        print("ERROR ON" + url)
    

    用法:

    1. 从 Eurostat 下载目录文件:http://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&file=table_of_contents_en.pdf
    2. 运行python3 上面的代码,用文件名编辑,如果它改变了。
    3. 用一些工具提取下载的.gz文件(建议:How to unzip gz file using Python
    4. 删除.gz 文件。

    完整代码在:https://github.com

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2013-02-02
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 2018-09-27
      • 2021-07-14
      相关资源
      最近更新 更多