• 怎么提取pdf中的表格数据In this article, we talk about the challenges and principles of extracting tabular data from PDF docs. We also compare six software tools to find out how they perform their ...

怎么提取pdf中的表格数据

In this article, we talk about the challenges and principles of extracting tabular data from PDF docs. We also compare six software tools to find out how they perform their respective tasks of parsing PDF tables and getting data out of them.
在本文中，我们讨论了从PDF文档中提取表格数据的挑战和原理。 我们还比较了六个软件工具，以了解它们如何执行各自的任务以解析PDF表并从中获取数据。
为什么从PDF中提取表格数据是一个挑战 (Why It’s a Challenge to Extract Tabular Data from PDF)
Today PDF is used as the basis of communication between companies, systems, and individuals. It is regarded as the standard for finalized versions of documents as it is not easily editable except in fillable PDF forms. Most popular use cases for PDF documents in the business environment are:
今天，PDF用作公司，系统和个人之间进行交流的基础。 它被认为是文档定稿版本的标准，因为除了可填写的PDF表格外，它不容易编辑。 在业务环境中，PDF文档的最流行用例是：
Invoices 发票 Purchase Orders 订单 Shipping Notes 运输注意事项 Reports 报告书 Presentations 简报 Price & Product Lists 价格和产品清单 HR Forms 人力资源表格
The sheer volume of information exchanged in PDF files means that the ability to extract data from PDF files quickly and automatically is essential. Spending time extracting data from PDFs to input into third party systems can be very costly for a company.
PDF文件中大量的信息交换意味着快速，自动地从PDF文件提取数据的能力至关重要。 花费时间从PDF提取数据以输入到第三方系统对于公司而言可能是非常昂贵的。
The main problem is that PDF was never really designed as a data input format, but rather, it was designed as an output format ensuring that data will look the same at any device and be printed correctly. A PDF file defines instructions to place characters (and other components) at precise x,y coordinates. Words are simulated by placing some characters closer than others. Spaces are simulated by placing words relatively far apart. As for tables — you are right — they are simulated by placing words as they would appear in a spreadsheet.
主要问题是PDF从来没有真正设计成数据输入格式，而是设计成输出格式，以确保数据在任何设备上看起来都一样并且可以正确打印。 PDF文件定义了将字符(和其他组件)放置在精确的x，y坐标处的指令。 通过将某些字符放置得比其他字符更近来模拟单词。 通过将单词相对分开放置来模拟空间。 至于表，您是对的，它们是通过像在电子表格中一样放置单词来模拟它们的。
We see that the PDF format has no internal representation of a table structure, which makes it difficult to extract tables for analysis. Unfortunately, a lot of open data is stored in PDFs, which was not designed for tabular data in the first place.
我们看到PDF格式没有表结构的内部表示，这使得提取表进行分析变得很困难。 不幸的是，许多开放数据存储在PDF中，而这些数据最初并不是为表格数据而设计的。
Luckily, different tools for extracting data from PDF tables are available in the market. Being somewhat similar to each other, they have their own advantages and disadvantages. In this article, we compare the most popular software that can help get tabular data out of PDFs and present it in an easy-to-read, editable, and searchable format.
幸运的是，市场上有多种用于从PDF表提取数据的工具。 它们彼此有点相似，但各有优缺点。 在本文中，我们将比较最流行的软件，该软件可以帮助从PDF中获取表格数据，并以易于阅读，可编辑和可搜索的格式显示它们。
OCR：何时以及为什么使用它 (OCR: When and Why to Use It)
Before choosing a tool, the first point is to understand what type of PDF files — text- or image-based — you will work with. It will impact on whether to use Optical Character Recognition (OCR) or not.
在选择工具之前，首先要了解您将使用哪种类型的PDF文件(基于文本或图像)。 这将影响是否使用光学字符识别(OCR)。
For example, we have a report generated as an output by a piece of software and imported in PDF format. Commonly, it is a text-based PDF.
例如，我们有一个报告，它是由一个软件生成的输出，并以PDF格式导入。 通常，它是基于文本的PDF。
If you work with image-based PDFs like scanned paper docs, or, for example, files captured by a digital camera — this is where OCR comes in. OCR enables machines to recognize written text or printed letters inside images. In other words, the technology helps to convert ‘text-as-an-image’ into an editable and searchable format.
如果您使用基于图像的PDF(例如，扫描的纸张文档)，或者使用数码相机捕获的文件，则可以使用OCR。OCR使机器可以识别图像中的文字或印刷字母。 换句话说，该技术有助于将“文本图像”转换为可编辑和可搜索的格式。

Document scanned and converted into a text document using OCR

使用OCR扫描文档并将其转换为文本文档

o if your PDF is image-based, then the process of data extraction consists of two tasks: to recognize text and then recognize the table structure (i.e., how the text is placed in rows and columns). Some tools, like Amazon Textract, can complete both of them. But since text recognition is a separate task, it can be performed independently, with the help of pure OCR tools. There are dozens of them, but in this article, we will focus on the table structure recognition.
o如果您的PDF是基于图像的，则数据提取过程包括两个任务：识别文本，然后识别表结构(即，文本在行和列中的放置方式)。 某些工具(例如Amazon Textract)可以完成这两个工具。 但由于文本识别是一项单独的任务，因此可以在纯OCR工具的帮助下独立执行。 它们有数十种，但是在本文中，我们将重点放在表结构识别上。
从表中检测和提取数据的细节 (Nuances of Detecting and Extracting Data from Tables)
Let’s assume that we have a text-based PDF document generated as an output by a piece of software. It contains tabular data, and we want to extract it and present in a digital format. There are two main ways to detect tables:
假设我们有一个基于文本的PDF文档，它是由一个软件生成的输出。 它包含表格数据，我们希望将其提取并以数字格式显示。 检测表有两种主要方法：
Manually, when you detect column borders by eye and mark table columns by hands 手动，当您用肉眼检测列边界并用手标记表格列时 Automatically, when you rely on program algorithms 自动，当您依赖程序算法时
Some tools offer either manual or automatic detection, while others combine both variants. From our experience, we can say that most of our clients’ cases require automatic recognition because they handle hundreds of documents with a slightly variable table structure. For example, columns’ width can differ not only between two documents but also on different pages inside one document. Therefore, if we mark each column in each table on each page by hand, it would take a lot of time and effort.
一些工具提供手动或自动检测，而其他工具则结合了这两种变体。 根据我们的经验，我们可以说大多数客户的案例需要自动识别，因为他们处理的表结构略有变化的数百个文档。 例如，列的宽度不仅可以在两个文档之间不同，而且可以在一个文档内的不同页面上不同。 因此，如果我们在每个页面上手动标记每个表中的每一列，则将花费大量时间和精力。
For our study, we created a sample one-page document covering all typical difficulties of data extraction caused by an ‘inconsistent’ table structure. Here is it:
对于我们的研究，我们创建了一个样本的单页文档，其中涵盖了由“不一致”表结构引起的所有典型数据提取困难。 就这个：

Sample document created for the study

为研究创建的样本文件

As you can see, in our sample document, we have multiple tables, and all of them have different widths of columns and inconsistent alignments. In such cases, manual detection can be tedious. For this reason, we are not going to use software that offers only manual table data detection. We choose an automatic way, and let’s see how good are algorithms for each of the tools.
如您所见，在我们的示例文档中，我们有多个表，并且所有表都有不同的列宽和不一致的对齐方式。 在这种情况下，手动检测可能很乏味。 因此，我们将不使用仅提供手动表格数据检测的软件。 我们选择一种自动方式，让我们看看每种工具的算法效果如何。
In addition to the table structure’s basic elements, we also deliberately included some ‘extra formatting’ that can potentially complicate the process of recognition:
除了表结构的基本元素外，我们还故意包含一些“额外格式”，这些格式可能会使识别过程复杂化：
Multiple tables on a page — all of them should be detected 页面上有多个表格-应该检测到所有这些表格 Non-tabular data: headers and page number 非表格数据：标题和页码 The multiline text inside cells 单元格内的多行文字 Table column & row spanning — merged cells 表的列和行跨度—合并的单元格 Small table cell margins inside the table and between the table and the header 表格内部以及表格和标题之间的小表格单元格边距
PDF表提取库和工具的比较 (Comparison of PDF Table Extraction Libraries and Tools)
From this study, you will learn about how six software tools perform their respective tasks of parsing PDF tables and how they stack up against each other. In the first part, we compare Tabula, PDFTron, and Amazon Textract.
通过本研究，您将了解六个软件工具如何执行各自的解析PDF表的任务，以及它们如何相互堆叠。 在第一部分中，我们比较了Tabula，PDFTron和Amazon Textract。
Let’s see how libraries and tools mentioned above coped with this task of data recognition and extraction based on our sample document.
让我们看看上面提到的库和工具如何根据我们的示例文档来完成数据识别和提取的任务。
塔布拉 (Tabula)
Tabula is a tool for liberating data tables locked inside PDF files. Tool overview:
Tabula是用于释放锁定在PDF文件中的数据表的工具。 工具概述：
Type of software available: web application, requires simple local server setup 可用软件类型： Web应用程序，需要简单的本地服务器设置 Platforms: Windows, MacOS, open source (GitHub, MIT Licence) 平台： Windows，MacOS，开源(GitHub，MIT Licence) Terms of use: free, open-source 使用条款：免费，开源 Supported output formats: CSV, TSV, JSON 支持的输出格式： CSV，TSV，JSON Notes: Tabula only works on text-based PDFs, not scanned documents 注意： Tabula仅适用于基于文本的PDF，不适用于扫描的文档
After uploading our sample file and parsing data from it via Tabula, we got the following output:
在上传示例文件并通过Tabula解析其中的数据之后，我们得到以下输出：

Tabula: the result of detection of tables in the sample document

表格：示例文档中表格的检测结果

Zones marked in red are parts of the original file where Tabula detected tables. At this step, data recognition is captured correctly; all tables are detected, extraneous elements do not distort the result.
红色标记的区域是Tabula检测到表的原始文件的一部分。 在此步骤中，数据识别已正确捕获。 所有表都被检测到，无关元素不会扭曲结果。
But if we go further, we will see that the first row of the first and last rows of the last two tables is missing:
但是，如果走得更远，我们将看到最后两个表的第一行和最后一行的第一行丢失了：

Tabula’s Lattice method: preview of extracted tabular data

Tabula的Lattice方法：预览提取的表格数据

Tabula offers two options: two data extraction methods. The automatic detection method is Lattice. The result of its usage you can see above. If we try Stream, results become better; all data is extracted correctly without missing rows:
Tabula提供了两种选择：两种数据提取方法。 自动检测方法是莱迪思。 您可以在上面看到其使用结果。 如果尝试Stream ，结果会更好； 正确提取所有数据而不会丢失行：

Tabula’s Stream method: preview of extracted tabular data

Tabula的Stream方法：预览提取的表格数据

But using the Stream method, we face another problem: cells with multiline text are split into multiple table rows. It seems this variant is the best that we can get from Tabula.
但是使用Stream方法，我们面临另一个问题：具有多行文本的单元格被拆分为多个表行。 看来这种变形是我们可以从Tabula获得的最好的变形。
Summary: Tabula’s automatic detection method is not the best choice, so I don’t recommend relying on it. Both recognition methods provided by this tool have their own disadvantages. While data loss looks unacceptable in any case, split rows can be returned to their original state with additional processing — manually or with the script’s help.
简介 ：Tabula的自动检测方法不是最佳选择，因此我不建议依赖它。 此工具提供的两种识别方法都有其自身的缺点。 尽管在任何情况下数据丢失看起来都是不可接受的，但可以通过手动或在脚本的帮助下进行额外的处理，将拆分的行恢复为原始状态。
PDFTron (PDFTron)
PDFTron is software with multiple basic and advanced features that facilitate the manipulation of PDFs. Tool overview:
PDFTron是具有多种基本和高级功能的软件，可简化对PDF的操作。 工具概述：
Type of software available: desktop app, web browser app, mobile app 可用软件类型：桌面应用程序，Web浏览器应用程序，移动应用程序 Platforms: Android, iOS, Windows, Linux, MacOS 平台：Android，iOS，Windows，Linux，MacOS Terms of use: free trial period, pricing for licensing starts at $4000 annually 使用条款：免费试用期，许可的起价为每年4000美元 Supported output formats: MS Word, SVG, HTML 支持的输出格式：MS Word，SVG，HTML After uploading our sample file and parsing data from it via PDFTron, we got the following output: 在上传示例文件并通过PDFTron解析了其中的数据之后，我们得到以下输出： PDFTron: the result of detection of tables in the sample document PDFTron：样本文档中表格的检测结果 Red rectangles show the borders of detected tables. The number of tables and tabular data is recognized correctly, but headers of the third and fourth tables are captured as the table elements. 红色矩形显示检测到的表格的边框。 可以正确识别表和表格数据的数量，但是将第三和第四表的标题捕获为表元素。 If we convert the original PDF into HTML format using PDFTron, we’ll see that the headers named ‘CATEGORY 2’ and ‘CATEGORY 3’ are included as separate cells inside the table. Also, there are bugs with merged cells of the first table: the last two columns are merged as a larger one, and the second line of text is separated into a separate cell. 如果使用PDFTron将原始PDF转换为HTML格式，则会看到名为“ CATEGORY 2”和“ CATEGORY 3”的标头作为单独的单元格包含在表中。 此外，第一个表的合并单元格也存在错误：最后两列合并为较大的单元格，第二行文本被分隔为单独的单元格。 PDFTron: preview of extracted tabular data PDFTron：预览表格数据的预览 Summary: In the output document we can see a piece of non-tabular data incorrectly included in the extraction result. It’s not a big problem since it can be purged after processing, manually, or with the script’s help. Also, I will not recommend this tool in cases when you have a lot of merged cells — they might be messed up. 简介：在输出文档中，我们可以看到提取结果中错误地包含了一段非表格数据。 这不是一个大问题，因为可以在处理后，手动或在脚本的帮助下清除它。 另外，如果您有很多合并的单元格，则我不推荐使用此工具，因为它们可能会弄糟。 亚马逊Textract (Amazon Textract) Amazon Textract is a service that automatically extracts text and data from scanned documents that go beyond simple optical character recognition (OCR) to identify, understand, and extract data from forms and tables. Tool overview: Amazon Textract是一项服务，可以自动从扫描的文档中提取文本和数据，而不仅仅是简单的光学字符识别(OCR)来识别，理解和提取表单和表格中的数据。 工具概述： Type of software available: web application 可用软件类型：Web应用程序 Platforms: any modern web browser, all processing goes ‘in the Cloud’ 平台：任何现代的Web浏览器，所有处理都在“云端”进行 Terms of use: several models (free, monthly subscriptions, cost-per-page model) 使用条款：多种模式(免费，每月订阅，每页成本模式) Supported output formats: raw JSON, JSON for each page in the document, text, key/values exported as CSV, tables exported as CSV. 支持的输出格式：原始JSON，文档中每个页面的JSON，文本，以CSV格式导出的键/值，以CSV格式导出的表。 After uploading our sample file and parsing data from it via Amazon Textract, we got the following result: 在上传示例文件并通过Amazon Textract解析了其中的数据之后，我们得到了以下结果： Amazon Textract: the result of detection of tables in the sample document Amazon Textract：示例文档中表的检测结果 Zones painted in gray are parts of the original file where Amazon Textract detected tables. As you can see, it didn’t recognize the first table on the page, detected two separate tables — the second and the third — as a single one, and also messed up the order of tables on the page. 灰色区域是Amazon Textract检测到表的原始文件的一部分。 如您所见，它无法识别页面上的第一个表，将两个单独的表(第二个和第三个表)检测为单个表，并且还弄乱了页面上表的顺序。 Regarding the data inside the cells, the extraction result is quite satisfying with some exceptions: 关于单元内的数据，提取结果非常令人满意，但有一些例外： Missing the data of the first table in the extraction result 提取结果中缺少第一个表的数据 Header string ‘CATEGORY 3 is included as a part of table in the extraction result 标头字符串“ CATEGORY 3”作为表的一部分包含在提取结果中 Amazon Textract: preview of extracted tabular data Amazon Textract：预览表格数据的预览 Summary: Amazon Textract looks to be the less suitable tool for data extraction applied to this particular case. A large amount of data loss, messed order of tables, and non-tabular data in the output document. The main advantage of Amazon Textract compared to all other tools is OCR, so that you can extract tabular data from images or image-based PDFs. In the case of text-based PDF, I would recommend choosing another tool. 简介： Amazon Textract似乎不太适合应用于此特定案例的数据提取工具。 输出文档中大量数据丢失，表顺序混乱以及非表格数据。 与所有其他工具相比，Amazon Textract的主要优势是OCR，因此您可以从图像或基于图像的PDF中提取表格数据。 对于基于文本的PDF，我建议选择其他工具。 Here is the first part of the article ‘How to Extract Tabular Data from PDF. In the second part, which is coming soon, we will analyze three more popular solutions for extracting and converting data from PDF and prepare a big сomparison table where each tool is rated according to the specific criteria. Follow UpsilonIT’s blog not to miss the great content! 这是文章“如何从PDF提取表格数据”的第一部分。 在 即将推出 的第二部分中 ，我们将分析另外三种从PDF提取和转换数据的流行解决方案，并准备 一张巨大的比较表 ，其中每个工具均根据特定标准进行评级。 关注UpsilonIT的博客，不要错过精彩的内容！ 翻译自: https://medium.com/@upsilon_it/how-to-extract-tabular-data-from-pdf-part-1-16cc3a29fcfa 怎么提取pdf中的表格数据  展开全文 • 不久前，一位开发者提供了一个名为 Camelot 的工具，使用三行代码就能从 PDF 文件中提取表格数据。 项目地址：https://github.com/camelot-dev/camelot 项目作者提供了三种安装方法。首先，你可以使用 Conda ... 从 PDF 表格中获取数据是一项痛苦的工作。不久前，一位开发者提供了一个名为 Camelot 的工具，使用三行代码就能从 PDF 文件中提取表格数据。 项目地址：https://github.com/camelot-dev/camelot 项目作者提供了三种安装方法。首先，你可以使用 Conda 进行安装，这是最简单的。 conda install -c conda-forge camelot-py 最流行的安装方法是使用 pip 安装。 pip install camelot-py[cv] 还可以从项目中克隆代码，并使用源码安装。 git clone https://www.github.com/camelot-dev/camelot cd camelot pip install ".[cv]" 我选择用pip安装包，装好包后就来读取PDF文件了 import camelot tables = camelot.read_pdf('1.pdf') 然后就报错了。。 然后安装ghostscript 依然报错 最后在这个贴子上了解决方法https://github.com/atlanhq/camelot/issues/282 需要在ghostscript官网下载exe文件安装，下载地址：https://www.ghostscript.com/download/gsdnld.html 安装后就不报错了 接着读取pdf，发现读取的表是空的，就去阅读了一下说明，发现如果不设置页面，默认读取第一页 然后找到PDF中表格对应的页面，再执行代码 效果还不错，然后我试了下另外一个PDF文档，又出现了问题。。 表格又是空的 对比了两个文档，发现pdf1中选中页中有两个表格，且是三线表，而pdf2中只有一个表格，还是传统的表格。在pdf1中发现有一页只有一个三线表，就试了下那一页，发现仍然不能读取，那么问题应该就是camelot只能读取表格中的数据，读取不了三线表中的数据。 如果想把读取表格中的数据保存下来，可以参考如下代码 >>> tables[0].df # get a pandas DataFrame! >>> tables.export('foo.csv', f='csv', compress=True) # json, excel, html, sqlite，可指定输出格式 >>> tables[0].to_csv('foo.csv') # to_json, to_excel, to_html, to_sqlite， 导出数据为文件 >>> tables <TableList n=1> >>> tables[0] <Table shape=(7, 7)> # 获得输出的格式 >>> tables[0].parsing_report { 'accuracy': 99.02, 'whitespace': 12.24, 'order': 1, 'page': 1 }  展开全文 • matlab上如何导入excel表格然后画图工具：matlab 2018b1、打开matlab，点击主页下面导入数据，可以导入excel数据此将自己命名的huitushuju文件导入：2、点击打开按钮，即可将数据导入：3、鼠标选中Varname1...  在matlab上如何导入excel表格然后画图 工具：matlab 2018b 1、打开matlab，点击主页下面导入数据，可以导入excel数据，在此将自己命名的huitushuju文件导入： 2、点击打开按钮，即可将数据导入： 3、鼠标选中Varname1所有数据，右键弹出下拉菜单，选择导入所选内容，即可将数据导入matlab工作空间，同理可以将另外两个变量也导入： 4、依次将三列数据分别导入matlab空间如下，在工作空间会看到这三个变量，并知道三个变量的最大值及最小值： 5、在工作空间选中Varname1，右键弹出下拉菜单，可以对该工作变量进行重新命名，删除，绘制各种曲线等等操作 6、在此将其重新命名为X,同理将Varname2和Varname3分别命名为Y1,Y2 7、此时在命令区域，编写如下程序： plot(X,Y1,'r-'); hold on; plot(X,Y2,'b-.'); xlabel('时间/s'); ylabel('距离/m'); 8、运行该程序，即可绘制所需要的曲线。 如何利用matlab根据excel表格里面的数据画图 Matlab的 xlsread() 函数可以将Excel数据读入到matlab工作空间，然后就可以根据读入的数据作图。下面给出操作流程： 1、在Excel中输入数据，保存文件到Matlab的工作目录下，例如 test.xlsx 2、在matlab命令窗口输入以下代码： >> data = xlsread('test.xlsx'); % 读入excel数据 >> plot(data(1,:),data(2,:)); % 以第一行为x数据，第二行为y数据作图 3、做图如下所示 matlab如何从excel表格中读取数据？ 把这个EXCEL文件放到matlab目录下的work里,假设名为1.xls,然后在matlab里输入A=xlsread('1.xls'),即可导入数据,这时A是一个矩阵,若要其中的两列画图,可以这样：假设A为20行4列,我们要第3列所有的数据做为X轴坐标,第5列做Y轴坐标,命令如下：x=A(:,3);y=A(:,5);plot(x,y) 如何将Excel中的数据导入MATLAB并在MATLAB中画出图... 将待导入的矩阵结构的数据录入Excel中，录入时注意行列要跟原矩阵一一对应 录入完以后保存数据，为了后续步骤使用方便，命名时我们最好把它命名为我们接下来在MATLAB中要引百用的变量名(比如在MATLAB中要将该矩阵作为B矩阵参与运算，就可以把它命名为B.xls，xls为文件扩展名) 运行MATLAB程序，点击工具栏上的Import Data工具按钮 在弹出的“度Import Data”对话框中找到前面保存的数据文件(B.xls)，“打开” 弹出“Import”窗口，在窗口工具栏左侧导入选项中选择“Matrix(矩阵内)”，然后点击工具栏右侧的“勾”，导入数据 关闭“Import”窗口，回到MATLAB主程序，在WorkSpace(工作空间)中可以看到刚刚导入矩阵变量，接下来就可以对矩阵进行运算了 每次关闭MATLAB程序都会将工作空间中的变量清空，所以如果经常用到该变量，不妨将该变量保存为MAT文件 这样一来每次打开MATLAB，只需容要双击MAT文件便可以将变量导入工作空间 用matlab读取excel数据并把对应的数据分别画出曲线图 用xlsread()函数就可以读取Excel中的数据。 假设LHMHZ.xls的数据单元格A为x数据，B为y数据，则可以用代码实现来你的要求。 data=xlsread('LHMHZ.xls'); %% matlab读取Excel中的数据，并赋值给 data 数组 x=data(:,1); %单元格A的x数据 y=data(:,2); %单元格B的y数据 plot(x,y,'r-') %绘出图像  展开全文 • 关于游戏资源及数据提取的相关书籍，请参考本人共享的《揭秘数据解密的关键技术》PDF电子书。 Extractor V2.5 Extractor，一个可以让你从容不迫的应对007,ADAT,APAK,MHW,MIX,MW4,NPAK,PACK,PAK,PBO,PFF,PKR,POD,RES,... • 利用Selenium爬取东方财富网各上市公司历年的财务报表数据。 摘要：现在很多网页都采取JavaScript进行动态渲染，其中包括Ajax技术。上一篇文章通过分析Ajax接口数据，顺利爬取了澎湃新闻网动态网页中的图片。但有的...  需要学习的地方: 1.Selenium的安装,配置 2.Selenium的初步使用(自动翻页) 利用Selenium爬取东方财富网各上市公司历年的财务报表数据。 摘要： 现在很多网页都采取JavaScript进行动态渲染，其中包括Ajax技术。上一篇文章通过分析Ajax接口数据，顺利爬取了澎湃新闻网动态网页中的图片。但有的网页虽然也Ajax技术，但接口参数可能是加密的无法直接获得，比如淘宝；有的动态网页也采用JavaScript，但不是Ajax技术，比如Echarts官网。所以，当遇到这两类网页时，上一篇文章中的方法便不再奏效，需要新的采取新的方法，这其中包括干脆、直接、好用的的Selenium大法。东方财富网的财务报表网页也是通过JavaScript动态加载的，本文利用Selenium方法爬取该网站上市公司的财务报表数据。 [TOC] 1. 实战背景 很多网站都提供上市公司的公告、财务报表等金融投资信息和数据，比如：腾讯财经、网易财经、新浪财经、东方财富网等。这之中，发现东方财富网的数据非常齐全。 东方财富网有一个数据中心：http://data.eastmoney.com/center/，该数据中心提供包括特色数据、研究报告、年报季报等在内的大量数据（见下图）。 以年报季报类别为例，我们点开该分类查看一下2018年中报（见下图），可以看到该分类下又包括：业绩报表、业绩快报、利润表等7个报表的数据。以业绩报表为例，报表包含全部3000多只股票的业绩报表数据，一共有70多页。 假如，我们想获取所有股票2018年中的业绩报表数据，然后对该数据进行一些分析。采取手动复制的方法，70多页可以勉强完成。但如果想获取任意一年、任意季度、任意报表的数据，要再通过手动复制的方法，工作量会非常地大。举个例子，假设要获取10年间（40个季度）、所有7个报表的数据，那么手动复制的工作量大约将是：40×7×70（每个报表大约70页），差不多要重复性地复制2万次！！！可以说是人工不可能完成的任务。所以，本文的目标就是利用Selenium自动化技术，爬取年报季报类别下，任意一年（网站有数据至今）、任意财务报表数据。我们所需要做的，仅是简单输入几个字符，其他就全部交给电脑，然后过一会儿打开excel，就可以看到所需数据”静静地躺在那里”，是不是挺酷的？ 好，下面我们就开始实操一下。首先，需要分析要爬取的网页对象。 2. 网页分析 之前，我们已经爬过表格型的数据，所以对表格数据的结构应该不会太陌生，如果忘了，可以再看一下这篇文章：https://www.makcyun.top/web_scraping_withpython2.html 我们这里以上面的2018年中报的业绩报表为例，查看一下表格的形式。 网址url：http://data.eastmoney.com/bbsj/201806/lrb.html，bbsj代表年报季报，201803代表2018年一季报，类似地，201806表示年中报；lrb是利润表的首字母缩写，同理，yjbb表示业绩报表。可以看出，该网址格式很简单，便于构造url。 接着，我们点击下一页按钮，可以看到表格更新后，url没有发生改变，可以判定是采用了Javscript。那么，我们首先判断是不是采用了Ajax加载的。方法也很简单，右键检查或按F12，切换到network并选择下面的XHR，再按F5刷新。可以看到只有一个Ajax请求，点击下一页也并没有生成新的Ajax请求，可以判断该网页结构不是常见的那种点击下一页或者下拉会源源不断出现的Ajax请求类型，那么便无法构造url来实现分页爬取。 XHR选项里没有找到我们需要的请求，接下来试试看能不能再JS里找到表格的数据请求。将选项选为JS，再次F5刷新，可以看到出现了很多JS请求，然后我们点击几次下一页，会发现弹出新的请求来，然后右边为响应的请求信息。url链接非常长，看上去很复杂。好，这里我们先在这里打住不往下了。 可以看到，通过分析后台元素来爬取该动态网页的方法，相对比较复杂。那么有没有干脆、直截了当地就能够抓取表格内容的方法呢？有的，就是本文接下来要介绍的Selenium大法。 3. Selenium知识 Selenium 是什么？一句话，自动化测试工具。它是为了测试而出生的，但在近几年火热的爬虫领域中，它摇身一变，变成了爬虫的利器。直白点说， Seleninm能控制浏览器, 像人一样”上网”。比如，可以实现网页自动翻页、登录网站、发送邮件、下载图片/音乐/视频等等。举个例子，写几行python代码就可以用Selenium实现登录IT桔子，然后浏览网页的功能。 怎么样，仅用几行代码就能实现自动上网操作，是不是挺神奇的？当然，这仅仅是Selenium最简单的功能，还有很多更加丰富的操作，可以参考以下几篇教程： 参考网站： Selenium官网： https://selenium-python.readthedocs.io/ SeleniumPython文档（英文版）：http://selenium-python.readthedocs.org/index.html SeleniumPython文档（中文版）：https://selenium-python-zh.readthedocs.io/en/latest/faq.html Selenium 基本操作：https://www.yukunweb.com/2017/7/python-spider-Selenium-PhantomJS-basic/ Selenium爬取淘宝信息实战：https://cuiqingcai.com/2852.html 只需要记住重要的一点就是：Selenium能做到"可见即可爬"。也就是说网页上你能看到的东西，Selenium基本上都能爬取下来。包括上面我们提到的东方财富网的财务报表数据，它也能够做到，而且非常简单直接，不用去后台查看用了什么JavaScript技术或者Ajax参数。下面我们就实际来操练下吧。 4. 编码实现 4.1. 思路 安装配置好Selenium运行的相关环境，浏览器可以用Chrome、Firefox、PhantomJS等，我用的是Chrome；东方财富网的财务报表数据不用登录可直接获得，Selenium更加方便爬取；先以单个网页中的财务报表为例，表格数据结构简单，可先直接定位到整个表格，然后一次性获取所有td节点对应的表格单元内容；接着循环分页爬取所有上市公司的数据，并保存为csv文件。重新构造灵活的url，实现可以爬取任意时期、任意一张财务报表的数据。 根据上述思路，下面就用代码一步步来实现。 4.2. 爬取单页表格 我们先以2018年中报的利润表为例，抓取该网页的第一页表格数据，网页url：http://data.eastmoney.com/bbsj/201806/lrb.html 快速定位到表格所在的节点：id = dt_1，然后可以用Selenium进行抓取了，方法如下： from selenium import webdriverbrowser = webdriver.Chrome()# 当测试好能够顺利爬取后，为加快爬取速度可设置无头模式，即不弹出浏览器# 添加无头headlesss 1使用chrome headless,2使用PhantomJS# 使用 PhantomJS 会警告高不建议使用phantomjs，建议chrome headless# chrome_options = webdriver.ChromeOptions()# chrome_options.add_argument('--headless')# browser = webdriver.Chrome(chrome_options=chrome_options)# browser = webdriver.PhantomJS()# browser.maximize_window() # 最大化窗口,可以选择设置browser.get('http://data.eastmoney.com/bbsj/201806/lrb.html')element = browser.find_element_by_css_selector('#dt_1') # 定位表格，element是WebElement类型# 提取表格内容tdtd_content = element.find_elements_by_tag_name("td") # 进一步定位到表格内容所在的td节点lst = [] # 存储为listfor td in td_content: lst.append(td.text)print(lst) # 输出表格内容 这里，使用Chrome浏览器构造一个Webdriver对象，赋值给变量browser，browser调用get()方法请求想要抓取的网页。接着使用find_element_by_css_selector方法查找表格所在的节点：‘#dt_1’。 这里推荐一款小巧、快速定位css/xpath的Chrome插件：SelectorGadget，使用这个插件就不用再去源代码中手动定位节点那么麻烦了。 插件地址：https://chrome.google.com/webstore/detail/selectorgadget/mhjhnkcfbdhnjickkkdbjoemdmbfginb 紧接着再向下定位到td节点，因为网页中有很多个td节点，所以要用find_elements方法。然后，遍历数据节点存储到list中。打印查看一下结果： # list形式:['1', '002161', '远望谷', ...'-7960万', '09-29', '2','002316', '亚联发展', ...'1.79亿', '09-29', '3',... '50', '002683', '宏大爆破',...'1.37亿', '09-01'] 是不是很方便，几行代码就能抓取下来这一页表格，除了速度有点慢。 为了便于后续存储，我们将list转换为DataFrame。首先需要把这一个大的list分割为多行多列的子list，实现如下： import pandas as pd# 确定表格列数col = len(element.find_elements_by_css_selector('tr:nth-child(1) td'))# 通过定位一行td的数量，可获得表格的列数，然后将list拆分为对应列数的子listlst = [lst[i:i + col] for i in range(0, len(lst), col)]# 原网页中打开"详细"链接可以查看更详细的数据，这里我们把url提取出来，方便后期查看lst_link = []links = element.find_elements_by_css_selector('#dt_1 a.red')for link in links: url = link.get_attribute('href') lst_link.append(url)lst_link = pd.Series(lst_link)# list转为dataframedf_table = pd.DataFrame(lst)# 添加url列df_table['url'] = lst_linkprint(df_table.head()) # 查看DataFrame 这里，要将list分割为子list，只需要确定表格有多少列即可，然后将每相隔这么多数量的值划分为一个子list。如果我们数一下该表的列数，可以发现一共有16列。但是这里不能使用这个数字，因为除了利润表，其他报表的列数并不是16，所以当后期爬取其他表格可能就会报错。这里仍然通过find_elements_by_css_selector方法，定位首行td节点的数量，便可获得表格的列数，然后将list拆分为对应列数的子list。同时，原网页中打开”详细”列的链接可以查看更详细的数据，这里我们把url提取出来，并增加一列到DataFrame中，方便后期查看。打印查看一下输出结果： 可以看到，表格所有的数据我们都抓取到了，下面只需要进行分页循环爬取就行了。 这里，没有抓取表头是因为表头有合并单元格，处理起来就非常麻烦。建议表格抓取下来后，在excel中复制表头进去就行了。如果，实在想要用代码完成，可以参考这篇文章：https://blog.csdn.net/weixin_39461443/article/details/75456962 4.3. 分页爬取 上面完成了单页表格的爬取，下面我们来实现分页爬取。 首先，我们先实现Selenium模拟翻页跳转操作，成功后再爬取每页的表格内容。 from selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitimport timebrowser = webdriver.Chrome()browser.maximize_window() # 最大化窗口,可以选择设置wait = WebDriverWait(browser, 10)def index_page(page): try: browser.get('http://data.eastmoney.com/bbsj/201806/lrb.html') print('正在爬取第： %s 页' % page) wait.until( EC.presence_of_element_located((By.ID, "dt_1"))) # 判断是否是第1页，如果大于1就输入跳转，否则等待加载完成。 if page > 1: # 确定页数输入框 input = wait.until(EC.presence_of_element_located( (By.XPATH, '//*[@id="PageContgopage"]'))) input.click() input.clear() input.send_keys(page) submit = wait.until(EC.element_to_be_clickable( (By.CSS_SELECTOR, '#PageCont > a.btn_link'))) submit.click() time.sleep(2) # 确认成功跳转到输入框中的指定页 wait.until(EC.text_to_be_present_in_element( (By.CSS_SELECTOR, '#PageCont > span.at'), str(page))) except Exception: return Nonedef main(): for page in range(1,5): # 测试翻4页 index_page(page)if __name__ == '__main__': main() 这里，我们先加载了相关包，使用WebDriverWait对象，设置最长10s的显式等待时间，以便网页加载出表格。判断表格是否加载出来，用到了EC.presence_of_element_located条件。表格加载出来后，设置一个页面判断，如果在第1页就等待页面加载完成，如果大于第1页就开始跳转。 要完成跳转操作，我们需要通过获取输入框input节点，然后用clear()方法清空输入框，再通过send_keys()方法填写相应的页码，接着通过submit.click()方法击下一页完成翻页跳转。 这里，我们测试一下前4页跳转效果，可以看到网页成功跳转了。下面就可以对每一页应用第一页爬取表格内容的方法，抓取每一页的表格，转为DataFrame然后存储到csv文件中去。 4.4. 通用爬虫构造 上面，我们完成了2018年中报利润表： http://data.eastmoney.com/bbsj/201806/lrb.html，一个网页表格的爬取。但如果我们想爬取任意时期、任意一张报表的表格，比如2017年3季度的利润表、2016年全年的业绩报表、2015年1季度的现金流量表等等。上面的代码就行不通了，下面我们对代码进行一下改造，变成更通用的爬虫。从图中可以看到，东方财富网年报季报有7张表格，财务报表最早从2007年开始每季度一次。基于这两个维度，可重新构造url的形式，然后爬取表格数据。下面，我们用代码进行实现： # 重构url# 1 设置财务报表获取时期year = int(float(input('请输入要查询的年份(四位数2007-2018)： ')))# int表示取整，里面加float是因为输入的是str，直接int会报错，float则不会while (year < 2007 or year > 2018): year = int(float(input('年份数值输入错误，请重新输入：')))quarter = int(float(input('请输入小写数字季度(1:1季报，2-年中报，3：3季报，4-年报)： ')))while (quarter < 1 or quarter > 4): quarter = int(float(input('季度数值输入错误，请重新输入： ')))# 转换为所需的quarter 两种方法,2表示两位数，0表示不满2位用0补充quarter = '{:02d}'.format(quarter * 3)# quarter = '%02d' %(int(month)*3)date = '{}{}' .format(year, quarter)# 2 设置财务报表种类tables = int( input('请输入查询的报表种类对应的数字(1-业绩报表；2-业绩快报表：3-业绩预告表；4-预约披露时间表；5-资产负债表；6-利润表；7-现金流量表): '))dict_tables = {1: '业绩报表', 2: '业绩快报表', 3: '业绩预告表', 4: '预约披露时间表', 5: '资产负债表', 6: '利润表', 7: '现金流量表'}dict = {1: 'yjbb', 2: 'yjkb/13', 3: 'yjyg', 4: 'yysj', 5: 'zcfz', 6: 'lrb', 7: 'xjll'}category = dict[tables]# 3 设置urlurl = 'http://data.eastmoney.com/{}/{}/{}.html' .format('bbsj', date, category)print(url) # 测试输出的url 经过上面的设置，我们通过输入想要获得指定时期、制定财务报表类型的数值，就能返回相应的url链接。将该链接应用到前面的爬虫中，就可以爬取相应的报表内容了。 另外，除了从第一页开始爬取到最后一页的结果以外，我们还可以自定义设置想要爬取的页数。比如起始页数从第1页开始，然后爬取10页。 # 4 选择爬取页数范围start_page = int(input('请输入下载起始页数：\n'))nums = input('请输入要下载的页数，（若需下载全部则按回车）：\n')# 确定网页中的最后一页browser.get(url)# 确定最后一页页数不直接用数字而是采用定位，因为不同时间段的页码会不一样try: page = browser.find_element_by_css_selector('.next+ a') # next节点后面的a节点except: page = browser.find_element_by_css_selector('.at+ a')else: print('没有找到该节点')# 上面用try.except是因为绝大多数页码定位可用'.next+ a'，但是业绩快报表有的只有2页，无'.next+ a'节点end_page = int(page.text)if nums.isdigit(): end_page = start_page + int(nums)elif nums == '': end_page = end_pageelse: print('页数输入错误')# 输入准备下载表格类型print('准备下载:{}-{}' .format(date, dict_tables[tables])) 经过上面的设置，我们就可以实现自定义时期和财务报表类型的表格爬取了，将代码再稍微整理一下，可实现下面的爬虫效果： 视频截图： 视频地址：https://v.qq.com/x/page/y07335thsn2.html 背景中类似黑客帝国的代码雨效果，其实是动态网页效果。素材来源于下面这个网站，该网站还有很多酷炫的动态背景可以下载下来。 http://wallpaper.upupoo.com/store/paperDetail-1783830052.htm 4.5. 完整代码 整个爬虫的完整代码如下所示： from selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitimport timeimport pandas as pdimport os# 先chrome，后phantomjs# browser = webdriver.Chrome()# 添加无头headlessschrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')browser = webdriver.Chrome(chrome_options=chrome_options)# browser = webdriver.PhantomJS() # 会报警高提示不建议使用phantomjs，建议chrome添加无头browser.maximize_window() # 最大化窗口wait = WebDriverWait(browser, 10)def index_page(page): try: print('正在爬取第： %s 页' % page) wait.until( EC.presence_of_element_located((By.ID, "dt_1"))) # 判断是否是第1页，如果大于1就输入跳转，否则等待加载完成。 if page > 1: # 确定页数输入框 input = wait.until(EC.presence_of_element_located( (By.XPATH, '//*[@id="PageContgopage"]'))) input.click() input.clear() input.send_keys(page) submit = wait.until(EC.element_to_be_clickable( (By.CSS_SELECTOR, '#PageCont > a.btn_link'))) submit.click() time.sleep(2) # 确认成功跳转到输入框中的指定页 wait.until(EC.text_to_be_present_in_element( (By.CSS_SELECTOR, '#PageCont > span.at'), str(page))) except Exception: return Nonedef parse_table(): # 提取表格第一种方法 # element = wait.until(EC.presence_of_element_located((By.ID, "dt_1"))) # 第二种方法 element = browser.find_element_by_css_selector('#dt_1') # 提取表格内容td td_content = element.find_elements_by_tag_name("td") lst = [] for td in td_content: # print(type(td.text)) # str lst.append(td.text) # 确定表格列数 col = len(element.find_elements_by_css_selector('tr:nth-child(1) td')) # 通过定位一行td的数量，可获得表格的列数，然后将list拆分为对应列数的子list lst = [lst[i:i + col] for i in range(0, len(lst), col)] # 原网页中打开"详细"链接，可以查看更详细的数据，这里我们把url提取出来，方便后期查看 lst_link = [] links = element.find_elements_by_css_selector('#dt_1 a.red') for link in links: url = link.get_attribute('href') lst_link.append(url) lst_link = pd.Series(lst_link) # list转为dataframe df_table = pd.DataFrame(lst) # 添加url列 df_table['url'] = lst_link # print(df_table.head()) return df_table# 写入文件def write_to_file(df_table, category): # 设置文件保存在D盘eastmoney文件夹下 file_path = 'D:\\eastmoney' if not os.path.exists(file_path): os.mkdir(file_path) os.chdir(file_path) df_table.to_csv('{}.csv' .format(category), mode='a', encoding='utf_8_sig', index=0, header=0)# 设置表格获取时间、类型def set_table(): print('*' * 80) print('\t\t\t\t东方财富网报表下载') print('作者：高级农民工 2018.10.6') print('--------------') # 1 设置财务报表获取时期 year = int(float(input('请输入要查询的年份(四位数2007-2018)：\n'))) # int表示取整，里面加float是因为输入的是str，直接int会报错，float则不会 # https://stackoverflow.com/questions/1841565/valueerror-invalid-literal-for-int-with-base-10 while (year < 2007 or year > 2018): year = int(float(input('年份数值输入错误，请重新输入：\n'))) quarter = int(float(input('请输入小写数字季度(1:1季报，2-年中报，3：3季报，4-年报)：\n'))) while (quarter < 1 or quarter > 4): quarter = int(float(input('季度数值输入错误，请重新输入：\n'))) # 转换为所需的quarter 两种方法,2表示两位数，0表示不满2位用0补充， # http://www.runoob.com/python/att-string-format.html quarter = '{:02d}'.format(quarter * 3) # quarter = '%02d' %(int(month)*3) date = '{}{}' .format(year, quarter) # print(date) 测试日期 ok # 2 设置财务报表种类 tables = int( input('请输入查询的报表种类对应的数字(1-业绩报表；2-业绩快报表：3-业绩预告表；4-预约披露时间表；5-资产负债表；6-利润表；7-现金流量表): \n')) dict_tables = {1: '业绩报表', 2: '业绩快报表', 3: '业绩预告表', 4: '预约披露时间表', 5: '资产负债表', 6: '利润表', 7: '现金流量表'} dict = {1: 'yjbb', 2: 'yjkb/13', 3: 'yjyg', 4: 'yysj', 5: 'zcfz', 6: 'lrb', 7: 'xjll'} category = dict[tables] # 3 设置url # url = 'http://data.eastmoney.com/bbsj/201803/lrb.html' eg. url = 'http://data.eastmoney.com/{}/{}/{}.html' .format( 'bbsj', date, category) # # 4 选择爬取页数范围 start_page = int(input('请输入下载起始页数：\n')) nums = input('请输入要下载的页数，（若需下载全部则按回车）：\n') print('*' * 80) # 确定网页中的最后一页 browser.get(url) # 确定最后一页页数不直接用数字而是采用定位，因为不同时间段的页码会不一样 try: page = browser.find_element_by_css_selector('.next+ a') # next节点后面的a节点 except: page = browser.find_element_by_css_selector('.at+ a') # else: # print('没有找到该节点') # 上面用try.except是因为绝大多数页码定位可用'.next+ a'，但是业绩快报表有的只有2页，无'.next+ a'节点 end_page = int(page.text) if nums.isdigit(): end_page = start_page + int(nums) elif nums == '': end_page = end_page else: print('页数输入错误') # 输入准备下载表格类型 print('准备下载:{}-{}' .format(date, dict_tables[tables])) print(url) yield{ 'url': url, 'category': dict_tables[tables], 'start_page': start_page, 'end_page': end_page }def main(category, page): try: index_page(page) # parse_table() #测试print df_table = parse_table() write_to_file(df_table, category) print('第 %s 页抓取完成' % page) print('--------------') except Exception: print('网页爬取失败，请检查网页中表格内容是否存在')# 单进程if __name__ == '__main__': for i in set_table(): # url = i.get('url') category = i.get('category') start_page = i.get('start_page') end_page = i.get('end_page') for page in range(start_page, end_page): # for page in range(44,pageall+1): # 如果下载中断，可以尝试手动更改网页继续下载 main(category, page) print('全部抓取完成') 这里，我下载了所有上市公司的部分报表。 2018年中报业绩报表： 2017年报的利润表： 转载于:https://www.cnblogs.com/jessitommy/p/11077146.html 展开全文 • ## 数据的提取方法 - 1 千次阅读 2018-12-05 18:59:16 数据提取的基础概念和数据分类 json模块的复习 正则表达式的复习 认识xml xpath的学习 LXML类库的学习 2 数据提取的概念和数据的分类 2.1 什么是数据提取 简单的来说，数据提取就是从响应中获取我们想要的... • 对贝叶斯决策进行决策和学习 对数据进行提取，然后利用贝叶斯进行决策，另外还实现贝叶斯学习 • 通过pandas库提取网页表格 朋友发给我一个网址，哭哭啼啼地求我：“去！把这个网页上所有年所有县所有作物的数据全爬下来，存到Access里！” 我看他可怜，勉为其难地挥挥手说：“好嘞，马上就开始！” 目标分析 ... • 我们前面给大家分享了Excel的PowerQuery 进行Web的数据提取，PowerBI 拥有目前Excel 所没有的函数，能够提供更加高级功能 • 数据提取之JSON与JsonPATH 糗事百科实例： 多线程糗事百科案例 页面解析和数据提取 一般来讲对我们而言，需要抓取的是某个网站或者某个应用的内容，提取有用的价值。内容一般分为两部分，非结构化的数据 和 结构... • MBD（基于模型的设计）开发中，经常需要用matlab读取表格中的数据进行处理。因此，本文专门研究了一下matlab语言中用于处理Excel表格的函数，总结其用法、输入输出变量以及它们的适用场景。 1 函数 常用的读取... • 数据提取的基础概念和数据分类 json模块的复习 正则表达式的复习 认识xml xpath的学习 LXML类库的学习 多线程和多进程爬虫的学习 1.3.1数据提取的概念和数据的分类 目标 了解什么是数据提取 熟悉爬虫的数据的种类 ... • 通过pandas库提取网页表格 上周五，大师兄发给我一个网址，哭哭啼啼地求我：“去！把这个网页上所有年所有县所有作物的数据全爬下来，存到Access里！” 我看他可怜，勉为其难地挥挥手说：“好嘞，马上就开始！” ... • 杜雨，EasyCharts团队成员，R语言中文社区...抓取数据时，很大一部分需求是抓取网页上的关系型表格。对于表格而言，R语言和Python中都封装了表格抓取的快捷函数，R语言中XML包中的readHTMLTables函数封装了提取HTML • 最近刚开始学python,正好实习工作中遇到对excel中的... 实际的问题是要从excel表中提取日期、邮件地址和时间，然后统计一定时间段内某个人某个项目上用了多少时间，最后做成一张数据透视表（这是问题的大致意思）。 • 手机的基本数据主要包括:通讯录、电话... 接下来通过adb pull命令,讲数据库提取到本地.(/data/data为沙盒数据,手机需要root,如果手机没root可以通过备份的获取,这里不是本文重点就不详细说了) adb pull /data/dat • #按照相同的数据提取另一个表中的相关信息 df1=pd.DataFrame(list2,columns['id','trip','time','target','longitudinal_radar','broadwise_radar','longitudinal_speed','broadwise_speed','target_vehicle','... • image.png ...我们可以执行shell脚本时实时传递参数从而指定某些具体的参数（本例中包括表格的样式、颜色等），脚本中获取参数的格式为$n。其中除n为0表示执行的文件名外，1表示第一个参数，2...
• 用java的swing组件画出表格，实现“增加”、“删除”、“保存”、“退出”的功能，并且与mysql数据库相连接。...可以实现提取数据库中表的数据显示到含有表格的窗体上，也可以将在表格中修改的内容写入数据库表中。
• 爬取CTIC-CRM数据
• 网页爬虫（也称为数据提取，数据采集，数据爬虫）如今已广泛应用于许多领域。没有网络爬虫工具出现之前，对于没有编程技能的普通人来说，它是一个神奇的词，它的高门槛不断将人们挡大数据之门之外。但是网页抓取...
• 最近碰到需要将excel中的数据导入python中进行处理时，遇到了一些简单的问题，简单来讲就是表格数据提取的相关操作和关于索引的一些简单操作，下面是一些小经验分享。 1、输出指定行的所有数据 import pandas as ...
• 今天中午处理excel表格，过程比较麻烦。 现已有表格1： 表格2： 想要把表格2中的B列填充至表格1相应B列。 问题在于：1）表1 表2 ...1）A列旁插入新列，将A列中的有用数据提取出来，并且转化成小写： =LOWER(MID
• 工作中，有时候会需要对两份内容相近的数据记录清单进行比对，需求不同，比对的的目标和要求也会有所不同。下面Office办公助手(www.officezhushou.com)的小编根据几个常见的应用环境介绍一下Excel表格数据比对和...
• 转载from****完柳亥婉仪(百度知道的大神) ...筛选出数据后，选中数据区域，按Alt+;（英文分号键）选定可见单元格区域，复制，然后转到另一表中，粘贴即可。 ...
• 首先导入json 清洗之前先介绍环境：hive 、beeline、Zeppelin 同时所需的文件下面的链接中，我祝你心情好????： 链接：https://pan.baidu.com/s/123qr-BuTa7nxLxd1LXvH8A 提取码：cz12
• 爬虫是都不陌生的一个概念，比如百度...我们浏览网站、查询信息时，如果想做一些批量的处理，也可以去分析网站的结构、抓取网页、提取信息，然后就完成了一个小爬虫的写作。网页爬虫需要我们了解URL的结构、HTML语法

...