鱼C论坛

 找回密码
 立即注册
楼主: wp231957

[已解决]浏览器插件咋写

[复制链接]
发表于 2024-7-18 13:52:39 | 显示全部楼层
wp231957 发表于 2024-07-18 13:51
good
再添加一些
1.A B C 三列  自适应宽度
2、为 ...


明白了,下面我会提供一个完整的 Python 代码示例,展示如何使用 pandas 和 openpyxl 进行以下操作:

1. 从 CSV 文件读取数据,并允许自定义表头。
2. 对第一列序号进行重新赋值,从 1 开始排序。
3. 设置 A、B、C 三列的宽度为自适应。
4. 为数据区域添加表格框线。

首先,确保你已经安装了 pandas 和 openpyxl 库。如果还没有安装,可以通过以下命令进行安装:

  1. pip install pandas openpyxl
复制代码


然后使用以下代码:

  1. import pandas as pd
  2. from openpyxl import Workbook
  3. from openpyxl.utils.dataframe import dataframe_to_rows
  4. from openpyxl.styles import Border, Side
  5. from openpyxl.utils import get_column_letter

  6. # 读取 CSV 文件,允许自定义表头
  7. def read_csv_with_header(file_path, custom_header=None):
  8.     if custom_header is not None:
  9.         df = pd.read_csv(file_path, header=None)
  10.         df.columns = custom_header
  11.     else:
  12.         df = pd.read_csv(file_path)
  13.     return df

  14. # 示例 CSV 文件路径和自定义表头
  15. csv_file_path = 'data.csv'
  16. custom_header = ['A', 'B', 'C']  # 自定义表头

  17. # 读取 CSV 文件
  18. df = read_csv_with_header(csv_file_path, custom_header)

  19. # 添加或重新赋值序号列
  20. df.insert(0, '序号', range(1, len(df) + 1))

  21. # 创建一个新的 Excel 工作簿
  22. wb = Workbook()
  23. ws = wb.active

  24. # 将 DataFrame 写入 Excel 工作表
  25. for r in dataframe_to_rows(df, index=False, header=True):
  26.     ws.append(r)

  27. # 自适应 A、B、C 三列宽度
  28. for col in ['A', 'B', 'C']:
  29.     max_length = 0
  30.     column = ws[col]
  31.     for cell in column:
  32.         try:
  33.             if len(str(cell.value)) > max_length:
  34.                 max_length = len(cell.value)
  35.         except:
  36.             pass
  37.     adjusted_width = (max_length + 2)
  38.     ws.column_dimensions[col].width = adjusted_width

  39. # 为表格添加框线
  40. thin_border = Border(left=Side(style='thin'),
  41.                      right=Side(style='thin'),
  42.                      top=Side(style='thin'),
  43.                      bottom=Side(style='thin'))

  44. for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
  45.     for cell in row:
  46.         cell.border = thin_border

  47. # 保存 Excel 文件
  48. excel_file_path = 'output.xlsx'
  49. wb.save(excel_file_path)

  50. print(f"Excel 文件已保存到 {excel_file_path}")
复制代码


### 代码解释:
1. **读取 CSV 文件**:定义了 `read_csv_with_header` 函数来读取 CSV 文件,并允许用户传递自定义表头。
2. **序号列重新赋值**:通过 `df.insert` 方法在数据框的第一列插入序号列,序号从 1 开始。
3. **创建 Excel 工作簿**:使用 openpyxl 创建一个新的 Excel 工作簿,并将 DataFrame 写入工作表。
4. **自适应列宽**:遍历 A、B、C 三列,计算每列的最大字符长度并设置相应的列宽。
5. **添加表格框线**:为数据区域添加边框。
6. **保存 Excel 文件**:将最终的 Excel 文件保存到指定路径。

这样,你的 Excel 文件就有了自定义表头、序号列重新排序、自适应宽度以及表格框线。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-19 09:56:46 | 显示全部楼层
FishC 发表于 2024-7-18 13:52
明白了,下面我会提供一个完整的 Python 代码示例,展示如何使用 pandas 和 openpyxl 进行以下操作:
...

这是我另一个页面遇到的问题,这个页面比较简单  没有什么动态加载  也没有什么iframe
我用document.querySelectorAll("table")[1]  就可以检索到表格数据
但是 我想要的数据   都被他在td 下面 又用div包裹了一层     请问,这样 要取1 2 3 列数据  该
如何写油猴脚本
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-19 09:59:02 | 显示全部楼层
wp231957 发表于 2024-07-19 09:56
这是我另一个页面遇到的问题,这个页面比较简单  没有 ...


明白了,我们要编写一个油猴脚本(Tampermonkey)来从网页表格中提取数据,特别是那些被 `div` 标签包裹的 `td` 元素中的数据。

以下是一个简单的油猴脚本示例,它会提取指定列的数据:

  1. // ==UserScript==
  2. // @name         Table Data Extractor
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  Extract specific columns from table
  6. // @author       You
  7. // @match        http(s)://*/*
  8. // @grant        none
  9. // ==/UserScript==

  10. (function() {
  11.     'use strict';

  12.     // 获取所有表格
  13.     const tables = document.querySelectorAll("table");

  14.     // 遍历所有表格
  15.     tables.forEach((table, tableIndex) => {
  16.         let data = [];

  17.         // 获取表格所有行
  18.         const rows = table.querySelectorAll('tr');
  19.         
  20.         rows.forEach((row, rowIndex) => {
  21.             // 创建一个数组来存储这一行的选定列数据
  22.             let rowData = [];

  23.             // 获取行内所有单元格 (td)
  24.             const cells = row.querySelectorAll('td');
  25.             
  26.             // 提取第1,2,3列的数据
  27.             [0, 1, 2].forEach(colIndex => {
  28.                 if (cells[colIndex]) {
  29.                     // 获取包裹在 div 内的文本
  30.                     const cellText = cells[colIndex].querySelector('div') ? cells[colIndex].querySelector('div').innerText : cells[colIndex].innerText;

  31.                     // 添加到 rowData 数组
  32.                     rowData.push(cellText);
  33.                 }
  34.             });

  35.             // 将 rowData 添加到 data 数组
  36.             if (rowData.length > 0) {
  37.                 data.push(rowData);
  38.             }
  39.         });

  40.         console.log(`Table ${tableIndex + 1} Data:`, data);
  41.     });
  42. })();
复制代码


### 脚本解析

1. **元数据块**:
   - 这部分包含一些油猴脚本的基础信息,如名称、作者、版本、匹配的URL等。

2. **核心函数**:
   - `const tables = document.querySelectorAll("table");`: 获取页面上的所有表格。
   - 遍历每个表格和其内部的行和单元格。
   - 使用 `querySelector('div')` 提取包裹在 `div` 内的文本内容。如果 `div` 不存在,则提取 `td` 的直接文本内容。
   - 将第1,2,3列的数据存储到 `rowData` 数组,并逐行添加到 `data` 数组中。

3. **日志输出**:
   - 使用 `console.log` 输出提取的数据,可以使用浏览器开发者工具查看。

这个脚本已经设置为提取每行的前3列数据,如果需要更多或不同的列,只需调整 `[0, 1, 2]` 中的索引即可。希望这个示例能帮助到你!如果有其他问题,随时提问哦。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-19 10:01:44 | 显示全部楼层
FishC 发表于 2024-7-19 09:59
明白了,我们要编写一个油猴脚本(Tampermonkey)来从网页表格中提取数据,特别是那些被 `div` 标签包 ...

麻烦按照这个格式写,最后要导csv的

// ==UserScript==
// @name         导出网页信息到文件
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  导出当前网页中的部分信息到CSV文件
// @author       wp231957
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 创建导出按钮
    const button = document.createElement('button');
    button.textContent = '导出表格数据2';
    button.style.position = 'fixed';
    button.style.top = '10px';
    button.style.right = '10px';
    button.style.zIndex = 2000;  // 确保按钮在其它元素之上
    document.body.appendChild(button);

    button.addEventListener('click', () => {
        // 找到你需要的表格和列,比如提取第1和第3列(索引从0开始)
        const rows = Array.from(document.querySelectorAll('table tbody tr'));

        // 调试用弹窗,检查提取到的行
        alert('提取到的行数:' + rows.length);

        const data = rows.map(row => {
            const cells = row.querySelectorAll('td');
            if (cells.length >= 3) {  // 确保有至少3个单元格
                return [cells[0].textContent,cells[1].textContent, cells[2].textContent]; // 提取第1和第3列
            }
            return [];
        });

        // 将数据转换为CSV格式
        const csvContent = "data:text/csv;charset=utf-8," + data.map(e => e.join(",")).join("\n");

        // 创建下载链接
        const encodedUri = encodeURI(csvContent);
        const link = document.createElement("a");
        link.setAttribute("href", encodedUri);
        link.setAttribute("download", "table_data2.csv");
        document.body.appendChild(link);

        // 点击下载链接
        link.click();

        // 清除下载链接
        document.body.removeChild(link);
    });
})();
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-19 10:03:08 | 显示全部楼层
wp231957 发表于 2024-07-19 10:01
麻烦按照这个格式写,最后要导csv的

// ==UserScri ...


好的,让我们来编写这个油猴脚本。该脚本将从网页中的表格中提取数据,并将其导出为 CSV 文件。我们需要按照以下步骤进行:

1. 创建一个按钮,用于触发数据导出。
2. 找到表格和相关列的数据。
3. 将数据转换为 CSV 格式。
4. 生成一个下载链接,点击后触发 CSV 下载。

以下是完整的油猴脚本代码:

  1. // ==UserScript==
  2. // @name         导出网页信息到文件
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  导出当前网页中的部分信息到CSV文件
  6. // @author       wp231957
  7. // @match        *://*/*
  8. // @grant        none
  9. // ==/UserScript==

  10. (function() {
  11.     'use strict';

  12.     // 创建导出按钮
  13.     const button = document.createElement('button');
  14.     button.textContent = '导出表格数据';
  15.     button.style.position = 'fixed';
  16.     button.style.top = '10px';
  17.     button.style.right = '10px';
  18.     button.style.zIndex = 2000;  // 确保按钮在其它元素之上
  19.     document.body.appendChild(button);

  20.     button.addEventListener('click', () => {
  21.         // 找到你需要的表格和列
  22.         const rows = Array.from(document.querySelectorAll('table tbody tr'));

  23.         // 提取每行的第1、2和3列数据(假设要取的列数是固定的)
  24.         const data = rows.map(row => {
  25.             const cells = row.querySelectorAll('td div');
  26.             if (cells.length >= 3) {  // 确保有至少3个单元格包裹div
  27.                 return [cells[0].textContent.trim(), cells[1].textContent.trim(), cells[2].textContent.trim()];
  28.             }
  29.             return [];
  30.         }).filter(row => row.length > 0);  // 过滤掉空行

  31.         // 将数据转换为CSV格式
  32.         const csvContent = "data:text/csv;charset=utf-8," + data.map(e => e.join(",")).join("\n");

  33.         // 创建下载链接
  34.         const encodedUri = encodeURI(csvContent);
  35.         const link = document.createElement("a");
  36.         link.setAttribute("href", encodedUri);
  37.         link.setAttribute("download", "table_data.csv");
  38.         document.body.appendChild(link);

  39.         // 点击下载链接
  40.         link.click();

  41.         // 清除下载链接
  42.         document.body.removeChild(link);
  43.     });
  44. })();
复制代码


### 解释:
1. **创建按钮**:
   - 在页面上固定位置创建一个按钮,用户点击之后会触发数据导出功能。

2. **查找表格行和单元格**:
   - 使用 `document.querySelectorAll('table tbody tr')` 找到表格的所有行。
   - 对于每一行,使用 `row.querySelectorAll('td div')` 查找所有单元格内的 `div` 元素。

3. **提取数据**:
   - 从每个单元格的 `div` 中提取第1、2和3列的数据。
   - 使用 `.trim()` 去除多余的空格以保证数据干净。

4. **生成 CSV**:
   - 将提取的数据转换为 CSV 格式,并创建一个下载链接。
   - 自动点击下载链接,以便用户可以直接下载 CSV 文件。

希望这个脚本能帮助你顺利导出表格数据!如果有其他需求或者问题,随时欢迎提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 13:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表