代码之家  ›  专栏  ›  技术社区  ›  Recursion

用Python在XML或HTML文件的标记之间获取数据的简单方法?

  •  1
  • Recursion  · 技术社区  · 15 年前

    我正在使用python,需要查找和检索标记之间的所有字符数据:

    <tag>I need this stuff</tag>
    

    然后我想将找到的数据输出到另一个文件。我只是在寻找一种非常简单有效的方法来做到这一点。

    如果您可以发布一个快速的代码片段来描述易用性。因为我很难理解解析器。

    6 回复  |  直到 15 年前
        1
  •  6
  •   ghostdog74    15 年前

    没有外部模块,如

    >>> myhtml = """ <tag>I need this stuff</tag>
    ... blah blah
    ... <tag>I need this stuff too
    ... </tag>
    ... blah blah """
    >>> for item in myhtml.split("</tag>"):
    ...   if "<tag>" in item:
    ...       print item [ item.find("<tag>")+len("<tag>") : ]
    ...
    I need this stuff
    I need this stuff too
    
        2
  •  2
  •   Andrew Hare    15 年前

    Beautiful Soup 是一个很好的用于Python的HTML/XML解析器:

    漂亮的汤是一个python html/xml 为快速周转而设计的解析器 类似屏幕抓取的项目。三 功能强大:

    1. 如果你加价不好,这道漂亮的汤就不会呛人。它产生了 分析树,使 像你的原始文件一样有意义。 这个通常足够收集 你需要的数据就会跑掉。
    2. 美丽的汤提供了一些简单的方法和蟒蛇习语 导航、搜索和修改 解析树:用于分析 记录并提取所需内容。 您不必创建自定义 每个应用程序的分析器。
    3. 漂亮的汤自动将传入的文档转换为Unicode 以及发送到UTF-8的文件。你 不用考虑编码, 除非文档没有指定 编码和靓汤不能 自动检测一个。那么你只需要 指定原始编码。
        3
  •  2
  •   Aiden Bell    15 年前

    我很喜欢分析 element tree 然后使用 element.text element.tail .

    它也有 XPath 喜欢搜索

    >>> from xml.etree.ElementTree import ElementTree
    >>> tree = ElementTree()
    >>> tree.parse("index.xhtml")
    <Element html at b7d3f1ec>
    >>> p = tree.find("body/p")     # Finds first occurrence of tag p in body
    >>> p
    <Element p at 8416e0c>
    >>> p.text
    "Some text in the Paragraph"
    >>> links = p.getiterator("a")  # Returns list of all links
    >>> links
    [<Element a at b7d4f9ec>, <Element a at b7d4fb0c>]
    >>> for i in links:             # Iterates through all found links
    ...     i.attrib["target"] = "blank"
    >>> tree.write("output.xhtml")
    
        4
  •  1
  •   Shravya K    7 年前

    我就是这样做的:

        (myhtml.split('<tag>')[1]).split('</tag>')[0]
    

    告诉我它是否有效!

        5
  •  0
  •   torger    15 年前

    使用xpath和lxml;

    from lxml import etree
    
    pageInMemory = open("pageToParse.html", "r")
    
    parsedPage = etree.HTML(pageInMemory)
    
    yourListOfText = parsedPage.xpath("//tag//text()")
    
    saveFile = open("savedFile", "w")
    saveFile.writelines(yourListOfText)
    
    pageInMemory.close()
    saveFile.close()
    

    比清汤快。

    如果你想测试你的xpath-我发现 FireFox's Xpather extremely helpful .

    进一步说明:

        6
  •  0
  •   E.G. Cortes    8 年前
    def value_tag(s):
        i = s.index('>')
        s = s[i+1:]
        i = s.index('<')
        s = s[:i]
        return s