精华内容
下载资源
问答
  • 很多时候我们需要爬取网上的文件并提取文件的数据做对比,文件...一、首先要爬取网页内容下载pdf文件import requestsfrom lxml import htmletree = html.etreeimport osimport timedef main(i):#第一页if i==1:url =...

    很多时候我们需要爬取网上的文件并提取文件的数据做对比,文件一般为pdf格式需要转化为excel表格,现在可以用python实现采集数据到提取数据的全流程操作。

    一、首先要爬取网页内容下载pdf文件

    import requests

    from lxml import html

    etree = html.etree

    import os

    import time

    def main(i):

    #第一页

    if i==1:

    url = "http://www.innocom.gov.cn/gxjsqyrdw/gswj/list.shtml"

    #进行翻页处理

    else:

    url = 'http://www.innocom.gov.cn/gxjsqyrdw/gswj/list'+'_'+str(i)+'.shtml'

    html = requests.get(url)

    time.sleep(60)

    xhtml = etree.HTML(html.content.decode("utf-8"))

    #定位到需要提取的内容

    node = xhtml.xpath('/html/body/div[2]/div[1]/div[3]/ul/li/a[contains(text(), "拟认定")]/@href')

    res = []

    for url in node:

    #拼接pdf的url

    url = 'http://www.innocom.gov.cn/' + url

    html = requests.get(url)

    time.sleep(60)

    xhtml = etree.HTML(html.content.decode("utf-8"))

    node = xhtml.xpath('//*[@id="content"]//@href')

    url_1 =url[::-1]

    a= url[:-url_1.find('/')]

    res.append(a+node[0])

    print(a+node[0])

    #点击url下载pdf文件

    for i in range(len(res)):

    r = requests.get(res[i])

    os.makedirs('名单./',exist_ok=True) #创建目录存放文件

    f = open('名单./'+f"{i}.pdf", 'wb')

    for chunk in r.iter_content():

    if chunk: # filter out keep-alive new chunks

    f.write(chunk)

    f.close()

    if __name__=='__main__':

    for i in range(1,15):

    main(i)

    二、把pdf解析为excel文件

    1.使用tabula模块解析

    import tabula

    import pandas as pd

    df = tabula.read_pdf("1.pdf", encoding='utf-8', pages='all')

    df = pd.DataFrame(df)

    print(df)

    2.使用adobe.acrobat来批量解析某个文件夹下所有的pdf文件

    import os

    import winerror

    from win32com.client.dynamic import Dispatch, ERRORS_BAD_CONTEXT

    ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)

    my_dir = r"C:\Users\sq\Desktop\名单"

    file_list = os.listdir(my_dir)

    print(file_list)

    for i in file_list:

    my_pdf = f"{i}"

    os.chdir(my_dir)

    src = os.path.abspath(my_pdf)

    try:

    AvDoc = Dispatch("AcroExch.AVDoc")

    if AvDoc.Open(src, ""):

    pdDoc = AvDoc.GetPDDoc()

    jsObject = pdDoc.GetJSObject()

    i = i[:-4]

    #也可以把后缀转为其他格式

    jsObject.SaveAs(os.path.join(my_dir, f'{i}.xlsx'), "com.adobe.acrobat.xlsx")

    except Exception as e:

    print(str(e))

    finally:

    AvDoc.Close(True)

    jsObject = None

    pdDoc = None

    AvDoc = None

    展开全文
  • Tabula是专门用来提取PDF表格数据的,同时支持PDF导出CSV、Excel格式。 首先安装tabula-py: tabula-py依赖库包括Java、pandas、numpy所以需要保证运行环境中...需要读取平均页数有二三百多页的PDF文件数据爬取...

    Tabula是专门用来提取PDF表格数据的,同时支持PDF导出CSV、Excel格式。

    首先安装tabula-py:

    tabula-py依赖库包括Java、pandas、numpy所以需要保证运行环境中安装了这些库。

    在Python中配置好Java后看能否正常运行

    把PDF中爬取出来的数据制成表格,需要加载openpyxl:

    需要读取平均页数有二三百多页的PDF文件数据,爬取出需求数据,以及按需求格式制成不同的sheet表,PDF样式如下:

     把写好的Python文件放在和PDF文件放在同一目录下,运行Python文件自动导出我们所需的表格

     

    执行以上代码,成功导出提取的数据,分成3个sheet结果如下:

     以上方法完美的解决了在PDF中提取表格数据,同时支持PDF导出CSV、Excel格式,减少了手工输入,自动化简化了工作。

    文章如有错误请给与指教,谢谢!

     

    转载于:https://www.cnblogs.com/Estate-47/p/9630674.html

    展开全文
  • 简介   本文将展示一个稍微不一样点的爬虫。...本文将展示如何利用Python的camelot模块从PDF文件爬取表格数据。   在我们的日常生活和工作中,PDF文件无疑是最常用的文件格式之一,小到教材、课件,大到...

    简介

      本文将展示一个稍微不一样点的爬虫。
      以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据。这次,我们需要爬取的文档为PDF文件。本文将展示如何利用Python的camelot模块从PDF文件中爬取表格数据。
      在我们的日常生活和工作中,PDF文件无疑是最常用的文件格式之一,小到教材、课件,大到合同、规划书,我们都能见到这种文件格式。但如何从PDF文件中提取其中的表格,这却是一个大难题。因为PDF中没有一个内部的表示方式来表示一个表格。这使得表格数据很难被抽取出来做分析。那么,我们如何做到从PDF中爬取表格数据呢?
      答案是Python的camelot模块!
      camelot是Python的一个模块,它能够让任何人轻松地从PDF文件中提取表格数据。可以使用以下命令安装camelot模块(安装时间较长):

    pip install camelot-py
    

    camelot模块的官方文档地址为:https://camelot-py.readthedocs.io/en/master/
      下面将展示如何利用camelot模块从PDF文件中爬取表格数据。

    例1

      首先,让我们看一个简单的例子:eg.pdf,整个文件只有一页,这一页中只有一个表格,如下:

    eg.pdf

    使用以下Python代码就可以提取该PDF文件中的表格:

    import camelot
    
    # 从PDF文件中提取表格
    tables = camelot.read_pdf('E://eg.pdf', pages='1', flavor='stream')
    
    # 表格信息
    print(tables)
    print(tables[0])
    # 表格数据
    print(tables[0].data)
    

    输出结果为:

    <TableList n=1>
    <Table shape=(4, 4)>
    [['ID', '姓名', '城市', '性别'], ['1', 'Alex', 'Shanghai', 'M'], ['2', 'Bob', 'Beijing', 'F'], ['3', 'Cook', 'New York', 'M']]
    

    分析代码,camelot.read_pdf()为camelot的从表格中提取数据的函数,输入的参数为PDF文件的路径,页码(pages)和表格解析方法(有stream和lattice两个方法)。对于表格解析方法,默认的方法为lattice,而stream方法默认会把整个PDF页面当做一个表格来解析,如果需要指定解析页面中的区域,可以使用table_area这个参数。
      camelot模块的便捷之处还在于它提供了将提取后的表格数据直接转化为pandas,csv,JSON,html的函数,如tables[0].df,tables[0].to_csv()函数等。我们以输出csv文件为例:

    import camelot
    
    # 从PDF文件中提取表格
    tables = camelot.read_pdf('E://eg.pdf', pages='1', flavor='stream')
    
    # 将表格数据转化为csv文件
    tables[0].to_csv('E://eg.csv')
    

    得到的csv文件如下:

    输出的csv文件

    例2

      在例2中,我们将提取PDF页面中的某一区域的表格的数据。PDF文件的页面(部分)如下:

    Statistics-Fundamentals-Succinctly.pdf第53页

    为了提取整个页面中唯一的表格,我们需要定位表格所在的位置。PDF文件的坐标系统与图片不一样,它以左下角的顶点为原点,向右为x轴,向上为y轴,可以通过以下Python代码输出整个页面的文字的坐标情况:

    import camelot
    
    # 从PDF中提取表格
    tables = camelot.read_pdf('G://Statistics-Fundamentals-Succinctly.pdf', pages='53', \
                              flavor='stream')
    
    # 绘制PDF文档的坐标,定位表格所在的位置
    tables[0].plot('text')
    

    输出结果为:

    UserWarning: No tables found on page-53 [stream.py:292]
    

    整个代码没有找到表格,这是因为stream方法默认将整个PDF页面当作表格,因此就没有找到表格。但是绘制的页面坐标的图像如下:

    PDF页面的坐标

    仔细对比之前的PDF页面,我们不难发现,表格对应的区域的左上角坐标为(50,620),右下角的坐标为(500,540)。我们在read_pdf()函数中加入table_area参数,完整的Python代码如下:

    import camelot
    
    # 识别指定区域中的表格数据
    tables = camelot.read_pdf('G://Statistics-Fundamentals-Succinctly.pdf', pages='53', \
                              flavor='stream', table_area=['50,620,500,540'])
    
    # 绘制PDF文档的坐标,定位表格所在的位置
    table_df = tables[0].df
    
    print(type(table_df))
    print(table_df.head(n=6))
    

    输出的结果为:

    <class 'pandas.core.frame.DataFrame'>
             0               1                2           3
    0  Student  Pre-test score  Post-test score  Difference
    1        1              70               73           3
    2        2              64               65           1
    3        3              69               63          -6
    4        …               …                …           …
    5       34              82               88           6
    

    总结

      在具体识别PDF页面中的表格时,除了指定区域这个参数,还有上下标、单元格合并等参数,详细地使用方法可参考camelot官方文档网址:https://camelot-py.readthedocs.io/en/master/user/advanced.html。

    注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~

    参考文献

    1. camelot模块的官方文档:https://camelot-py.readthedocs.io/en/master/
    2. Camelot:一个从pdf抽取表格数据的Python库:https://blog.csdn.net/qq_40925239/article/details/83153599
    展开全文
  • PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献、文档...很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有色彩和格式。...

    ​PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献、文档...很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有色彩和格式。

    PDF是以PostScript语言图像模型为基础的一种文档格式,它在格式的稳定性方面虽然具有很大优势。但是,在可编辑性方面却为使用者引入了另外一个困扰。

    例如,在文档的分割、合并、剪切、转换、编辑等方面PDF就有些捉襟见肘了。

    Adobe Reader、福昕阅读器、熊猫PDF...经常用到的PDF工具只能用于文档阅读,但是免费版都不可以用于文档编辑。虽然,网页版PDF工具,例如SmallPDF、I love PDF可以用于PDF的编辑,但是对于文档大小也有限制。

    曾经,为了替换PDF中的一页,我几乎试遍了所有市面上主流的PDF工具,最终还是不得不选择使用付费工具来解决问题。

    事后想了想,既然这些商业化软件不靠谱,为什么不考虑自己动手开发一款工具呢?明明几十行代码能够解决的问题,为什么要费那么多劲去下载、安装那些没有节操的软件呢?

    本文就来介绍一下利用Python轻松开发一款PDF编辑工具,可以用于PDF转TxT、分割、合并、剪切、转换。

    PyPDF2

    PyPDF2是一个第三方的python PDF库,它能够对PDF文件进行分割、合并、裁剪和转换页面。

    另外,它还可以对PDF文件添加自定义数据、水印、密码,也可以从PDF文件中检索出文本和元数据。

    安装

    使用pip直接安装:

    $ pip install PyPDF2

    下面就来演示几项PDF编辑功能,并且会逐行解释代码的含义。

    删除PDF页

    先给出实现代码,

    from PyPDF2 import PdfFileWriter, PdfFileReader

    output = PdfFileWriter() // 1

    input1 = PdfFileReader(open("example.pdf", "rb")) // 2

    def delete_pdf(index):

    pages = input1.getNumPages() // 3

    for i in range(pages):

    if i+1 in index:

    continue

    output.addPage(input1.getPage(i)) // 4

    outputStream = open("PyPDF2-output.pdf", "wb")

    output.write(outputStream) // 5

    delete_pdf([2,3,4])

    下面来解释一下代码中的几个关键点:声明一个用于输出PDF的实例;

    读取本地PDF文件;

    获取PDF文档的页数;

    读取PDF的第i页,添加到输出output实例中;

    把编辑后的文档保存到本地;

    合并PDF

    已经实现了删除PDF页,接下来就看一下如何把另外一个PDF中的页面合并到当前PDF中。

    方法1:

    可以沿着前面删除PDF页的方式进行拓展一下,对PDF进行合并。

    from PyPDF2 import PdfFileWriter, PdfFileReader

    output = PdfFileWriter()

    input1 = PdfFileReader(open("example.pdf", "rb"))

    input2 = PdfFileReader(open("simple2.pdf", "rb")) // 1

    def merge_pdf(add_index, origin_index):

    pages = input1.getNumPages()

    k = 0

    for i in range(pages):

    if i+1 in add_index:

    output.addPage(input2.getPage(origin_index[k])) // 2

    pages += 1

    k += 1

    output.addPage(input1.getPage(i))

    outputStream = open("PyPDF2-output.pdf", "wb")

    output.write(outputStream)

    merge_pdf([2,3,4], [0, 0, 0])读取需要合并的源文件;

    遍历到指定页,合并源PDF的页面;

    方法2:

    除了方法1,还有另外一种方法可以合并PDF:

    from PyPDF2 import PdfFileMerger // 1

    merger = PdfFileMerger()

    input1 = open("document1.pdf", "rb") // 2

    input2 = open("document2.pdf", "rb")

    input3 = open("document3.pdf", "rb")

    merger.append(fileobj = input1, pages = (0,3)) // 3

    merger.merge(position = 2, fileobj = input2, pages = (0,1)) // 4

    merger.append(input3) // 5

    output = open("document-output.pdf", "wb")

    merger.write(output)导入PyPDF2合并模块PdfFileMerger;

    读取需要处理和合并的PDF文档;

    从第一个PDF文档中取出需要合并的前3页;

    把第二个PDF文档的第一页插入到文档中;

    把第三个PDF文档附到输出文档末尾;

    除了上述介绍的2项主要功能,PyPDF2也有一些其他小功能:

    旋转

    input1.getPage(1).rotateClockwise(90)

    使得页面1旋转90度。

    添加水印

    page = input1.getPage(3)

    watermark = PdfFileReader(open("watermark.pdf", "rb"))

    page.mergePage(watermark.getPage(0))

    其中,水印存储在另外一个PDF文档watermark.pdf中。

    加密

    password = "secret"

    output.encrypt(password)

    首先给一个secret密码,然后使用encrypt对输出文档进行加密。

    pdfminer

    前面介绍的PyPDF2主要擅长于PDF页面级编辑,而对于文本和源数据级别编辑能力较弱。

    所以,这里就来介绍另外一款Python库来弥补它的不足。

    PDFMiner是一个PDF文档的文本提取工具,它具有如下特性:能够准确获取文本的位置和布局信息;

    可以将PDF转换为HTML/XML等格式;

    可以提取目录;

    可以提取标签内容;

    支持各种字体类型(Type1、TrueType、Type3和CID);

    支持中、日、韩语言和垂直书写文本;

    安装

    $ pip install pdfminer

    PDF转TxT

    pdfminer在GitHub的托管项目中,在目录tools下给出了一些实用的工具集,例如,PDF转HTML、PDF转HTML、PDF转TXT。我们可以直接通过使用下面命令提出PDF文档中的文本信息。

    $ pdf2txt.py samples/simple1.pdf

    总结

    通过上述2款Python库,就可以实现从页面到文本元数据的编辑,本文只是简单的介绍了每项的基本用法。关于详细的用法和函数列表,可以阅读官方文档,或者阅读GitHub上项目源码进行了解。此外,可以在这些基本的用法基础上进行发散思维,发掘更多有价值的应用场景,例如,提出文本数据之后调用翻译API进行文献翻译。也可以,对软件进行封装,开发成一款通用的PDF编辑工具。

    展开全文
  • 简介本文将展示一个稍微不一样点的爬虫...本文将展示如何利用Python的camelot模块从PDF文件爬取表格数据。在我们的日常生活和工作中,PDF文件无疑是最常用的文件格式之一,小到教材、课件,大到合同、规划书,我们...
  • 本篇文章给大家带来的内容是关于Python如何实现从PDF文件爬取表格数据(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。本文将展示一个稍微不一样点的爬虫。以往我们的爬虫都是从...
  • camelot是Python的一个模块,它能够让任何人轻松地从PDF文件中提取表格数据。 (安装时间较长):pip install camelot-py camelot模块的官方文档地址为:https://camelot-py.readthedocs.io/en/master/ 案例 ...
  • 利用Python爬取巨潮网页上的年报等数据,通过解析下载的PDF文件,提取其中有用的数据,并写入到本地文件中。 主要分为几个模块: 1、从Excel或者列表或者TXT读取股票代码 2、根据股票代码和年份等信息爬取特定...
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。...
  • 前言 在很多网站上,都会以表格的形式展示数据,而我们获取这种数据只需通过十几行爬虫代码就可以搞定,轻松搞定网页爬虫,实现高效办公 知识点: ...可以免费领取源码、项目实战视频、PDF文件等 ..
  • 前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于CSDN,作者嗨学编程 ...是静态网站,可以直接请求网页获取数据 for page in range..
  • 浙江法院公开网文书PDF爬取

    千次阅读 2018-08-14 21:32:41
    #批量爬取下载文件-httr包实现异步加载+POST表单提交+cookie登入 #异步加载网页大多通过返回json字符串形式来获取数据 setwd("F:/...") url_yuan="http://www.zjsfgkw.cn" url_post="...
  • 可以免费领取源码、项目实战视频、PDF文件等 一、数据爬虫 工具:PyCharm Python版本:3.7.3 用到的库:pandas、jieba等 1、京东有部分数据是异步加载的,所以需要寻找到合适的链接。 2、爬取部分数据..
  • 0luckzpz - 像爱惜自己生命一样保护本金赞同来自:学习Python2020-09-08 22:240 条评论0luckzpz - 像爱惜自己生命一样保护本金赞同来自:似乎文件已经损坏了2020-09-08 22:250 条评论2附件 invlib.pdf 其实是个 zip ...
  • 2019/4/25 更新: YouTube视频下载库pytube出了点问题,需要修改一下源代码... 爬取PPT1网上的所有PPT课件(.rar格式); 解压并提取PPT文件; PPT转JPG图片(或PDF); 批量下载YouTube上的视频(需科学上网)...
  • 这样就生成了包含所有教程的html文件(BeautifulSoup)2、将html转换成pdf(wkhtmltopdf)3、如果有反爬,在爬取的过程中还需要代理ipBeautifulSoupBeautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库....
  • 在网络上访问数据有不同方式¶:-爬取HTML网页-直接下载数据文件,例如csv,txt,pdf文件-通过应用程序编程接口(API)访问数据,例如 电影数据库,Twitter选择网页爬取,当然了解HTML网页的基本结构,可以参考这个...
  • 目标:输入关键字爬取 http://www.freefullpdf.com/#gsc.tab=0 内pdf文件的网址(本网站为国外pdf文件网站,需要代理) 方法一:在浏览器上输入这个url,然后在这个网址的搜索框中随意输入一个关键字会发现网址栏...
  • 欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战...(2) 编写pipelines,用于处理解析后的股票数据并将这些数据存储到文件中。代码编写步骤:(1) 建立一个工程...
  • 不仅仅是小说,一些其他的数据在多线程爬取时也有类似情况,比如:漫画:漫画其实是由大量图片组成,一般一本漫画会保存为一个pdf文件,在此过程要保证图片的顺序。视频:现在网络上的视频大部分是由多个ts...
  • 首先要将pdf中表格数据提取,是比较难以写的,于是想到可以将pdf转成html,再用python中htmlparser爬取html文本中的数据,这其中的方法相对而言较为简单。首先是使用pdf2htmlEX,下载好后压缩文件解压后,可看到其中...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

爬取pdf文件数据