-6ren"> -这个问题已经有答案了: How to parse data-uri in python? (6 个回答) 已关闭 3 年前。 html标签有字符串值包含 CSV 内容: href = "data:te-6ren">
gpt4 book ai didi

python - 从 `

转载 作者:行者123 更新时间:2023-12-01 07:01:27 25 4
gpt4 key购买 nike

html标签有字符串值<a>包含 CSV 内容:

href = "data:text/csv;charset=UTF-8,%22csvcontentfollows"

有没有办法在没有此类元 header 的情况下获取此 CSV 内容 data:text/csv;charset=UTF-8通过标准模块的方法(requests、lxml、pure python)?

我不想使用手动文本解析(通过正则表达式、index/startswith、split/partition)。

更新:

谢谢,我知道如何使用 html。我关于此类元 header 的问题。我重新制定了。

最佳答案

以下是三种可能的解决方案。第一个使用 native Python urllib.request.urlopen 函数。第二个使用第三方库lxml 。第二个使用 native html.parser 模块中的 HTMLParser 类。第二个和第三个使用第三方库进行解析data URLspython-datauri

html_string = """
<a href="data:text/csv;charset=UTF-8,%22csvcontentfollows">
<a href="data:text/csv;charset=UTF-8,%22csvcontentfollows">
<a href="data:text/csv;charset=UTF-8,%22csvcontentfollows">
"""

from contextlib import ExitStack
from urllib.request import urlopen
import lxml.etree

HREF = "href"

tree = lxml.etree.fromstring(html_string, lxml.etree.HTMLParser())

uris = (
item.attrib[HREF]
for item in tree.iterdescendants()
if HREF in item.attrib
)

with ExitStack() as stack:
resources = (stack.enter_context(urlopen(uri)) for uri in uris)
data = [fh.read().decode() for fh in resources]
print(data)

输出:['csvcontentfollows', 'csvcontentfollows', 'csvcontentfollows']

import lxml.etree
from datauri import DataURI

tree = lxml.etree.fromstring(html_string, lxml.etree.HTMLParser())

HREF = "href"

uris = (
DataURI(item.attrib[HREF])
for item in tree.iterdescendants()
if HREF in item.attrib
)
attrs = ("mimetype", "charset", "is_base64", "data")
print([{attr: getattr(uri, attr) for attr in attrs}
for uri in uris])

输出:

[{'mimetype': 'text/csv', 'charset': 'UTF-8', 'is_base64': False, 'data': 'csvcontentfollows'}, {'mimetype': 'text/csv', 'charset': 'UTF-8', 'is_base64': False, 'data': 'csvcontentfollows'}, {'mimetype': 'text/csv', 'charset': 'UTF-8', 'is_base64': False, 'data': 'csvcontentfollows'}]


from html.parser import HTMLParser
from datauri import DataURI

uri_attrs = ("mimetype", "charset", "is_base64", "data")

class MyHTMLParser(HTMLParser):

def __init__(self):
super().__init__()
self.data = []

def handle_starttag(self, tag, attrs):
if tag == "a":
for attr, value in attrs:
if attr == "href":
for key, value in attrs:
uri = DataURI(value)
self.data.append({attr: getattr(uri, attr) for attr in uri_attrs})

parser = MyHTMLParser()
parser.feed(html_string)
print(parser.data)

输出:

[{'mimetype': 'text/csv', 'charset': 'UTF-8', 'is_base64': False, 'data': 'csvcontentfollows'}, {'mimetype': 'text/csv', 'charset': 'UTF-8', 'is_base64': False, 'data': 'csvcontentfollows'}, {'mimetype': 'text/csv', 'charset': 'UTF-8', 'is_base64': False, 'data': 'csvcontentfollows'}]

关于python - 从 `<a href="数据中提取内容 :text/csv;. ..content">,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com