我有一个ExcelElectron 表格,每行有一个图像,使用this example个作品来抓取图像.然而,我想要做的不是刮Electron 表格的图像,而是我想提取与该图像相关联的URL.如果我打开Excel文件,我可以点击图像并导航到给定的URL.是否无法通过Python提取此URL?

我已经查阅了有关Openpyxl的文档,以查看是否有任何从图像中抓取嵌入的URL的示例,但我找不到任何帮助.

如有任何帮助,将不胜感激.谢谢

推荐答案

作为一个很好的开始,您可以阅读/解压缩spreadsheet:

import zipfile
import pandas as pd

with zipfile.ZipFile("file.xlsx", "r") as zf:
    xmls = [zf.read(fn) for fn in zf.infolist()
            if fn.filename.startswith("xl/drawings/_rels/")]

urls = (
    pd.concat([pd.read_xml(data).assign(SheetNumber=i)
         for i, data in enumerate(xmls, start=1)]).sort_values(by=["SheetNumber", "Id"])
        .loc[lambda x: x["TargetMode"].eq("External"), ["SheetNumber", "Target"]]
        .reset_index(drop=True)
)

发帖主题:Re:Kolibrios

print(urls)

   SheetNumber                           Target
0            1       https://stackoverflow.com/
1            1   https://gis.stackexchange.com/
2            2  https://meta.stackexchange.com/
3            2           https://askubuntu.com/

To go further, we can use and the Styler to put the images next to their urls :

import string
import base64
from collections import defaultdict
from openpyxl import load_workbook   

workbook = load_workbook("file.xlsx")

images = defaultdict(list)
for ws in workbook:
    #https://github.com/ultr4nerd/openpyxl-image-loader
    for image in ws._images:
        row = image.anchor._from.row + 1
        col = string.ascii_uppercase[image.anchor._from.col]
        images[ws.title].append({f'{col}{row}': image._data()})

def tag_img(ser):
    return r'<div style="display: flex; justify-content: center;">'\
            '<img src="data:image/png;base64,{}" width="200" height="50"></div>' \
             .format(base64.b64encode(ser).decode("utf-8"))

imgs = pd.concat(
    [pd.DataFrame(v).stack().apply(tag_img)
        .reset_index(level=1, name="Image")
        .assign(SheetName=k).rename(columns={"level_1": "CellCoord"})
                 for k,v in images.items()], ignore_index=True
)

(
    imgs.join(urls)[["SheetNumber", "SheetName", "CellCoord", "Image", "Target"]].style
        .set_properties(**{"border":"1px solid",
            "text-align": "center", "background-color": "white"})
        .format(hyperlinks="html").pipe(display)
)

发帖主题:Re:Kolibrios

enter image description here

Spreadsheet used(file.xlsx):

enter image description here

Python相关问答推荐

替换字符串中的点/逗号,以便可以将其转换为浮动

由于瓶颈,Python代码执行太慢-寻求性能优化

如何计算列表列行之间的公共元素

多处理代码在while循环中不工作

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

重新匹配{ }中包含的文本,其中文本可能包含{{var}

难以在Manim中正确定位对象

'discord.ext. commanders.cog没有属性监听器'

如何过滤包含2个指定子字符串的收件箱列名?

Julia CSV for Python中的等效性Pandas index_col参数

try 将一行连接到Tensorflow中的矩阵

如何将多进程池声明为变量并将其导入到另一个Python文件

让函数调用方程

在嵌套span下的span中擦除信息

不允许 Select 北极滚动?

语法错误:文档. evaluate:表达式不是合法表达式

Python将一个列值分割成多个列,并保持其余列相同

比较两个有条件的数据帧并删除所有不合格的数据帧

Regex用于匹配Python中逗号分隔的AWS区域

如何在Python中解析特定的文本,这些文本包含了同一行中的所有内容,