【问题标题】:get element and change element text with python and lxml使用 python 和 lxml 获取元素并更改元素文本
【发布时间】:2011-11-18 23:04:45
【问题描述】:

首先,我知道 StackOverflow 上已经有很多关于 python 和 lxml 的问题,而且我确实阅读了其中的大部分,如果不是全部的话。现在我正在寻找这个问题的更全面的答案。

我正在做一些 HTML 转换,我需要对 HTML 进行语法解析,然后对 hrefimg 等进行一些内容更改。

这是我现在所拥有的简化版本:

with open(fileName, "r") as inFile:
    inputS = inFile.read()

myTree = fromstring(inputS) #parse etree from HTML content

breadCrumb = myTree.get_element_by_id("breadcrumb") #a list of elements with matching id
breadCrumbContent = breadCrumb[0].text_content().strip() #text content of bread crumb

h1 = myTree.xpath('//h1') #another way, get elements by xpath
h1Content = h1[0].text_content().strip() #get text content

getTail = myTree.cssselect('table.results > tr > td > a + span + br') #get list of elements using css select

所以基本上这就是我目前所知道的。有没有其他方法可以使用 lxml 获取元素/属性?我知道他们可能不是最好的方法,但请耐心等待,我对这一切都是新手。

以下是我想做的。我有:

<img src="images/macmail10.gif" alt="" width="555" height="485" /><br />
<a href="http://www.some_url.com/faq/general_faq.html" target="_blank">General FAQs page</a>

它们可以嵌套在其他元素中,例如divp。我想做的是以编程方式查找这些元素;对于图像,我想提取src,对其进行一些操作并将src 设置为其他内容(例如,将src="images/something.jpg" 设置为src="something_images.jpg"),与href 相同,我想更改它使它指向其他地方。

除此之外,我还想从树中删除一些元素以简化它,例如:

<head>
    <title>something goes here</title>
</head>
<div>
    <p id="some_p"> Some content </p>
</div>

我想删除头节点和 div,我可以使用id="some_p" 获取 p,有什么方法可以获取父元素吗?还有什么方法可以删除这些元素吗? (在这种情况下,查找head,删除head,然后查找id="some_p",获取parent 并将其删除。

谢谢!

================================================ ===

更新:我已经找到了解决方案,并且已经使用 lxml.etree 完成了编码。只要stackoverflow允许我,我就会发布答案。我真的希望这个问题的答案对其他需要处理 HTML 解析的人有所帮助!

【问题讨论】:

  • +1 以获得明确的问题。 (而不是尝试使用正则表达式!)

标签: python html lxml


【解决方案1】:

lxmlElementTreequite similar。 lxml 文档站点的 ElementTree 部分,实际上只是指向 ElementTree 的文档。

您可以尝试浏览概览页面底部的ElementTree tutorials and examples。由于 ElementTree 是 Python 发行版的一部分,因此它往往被广泛记录(并且很容易用 Google 搜索)。一旦你理解了这一点,如果需要,可以使用 ElementTree 中最初没有的一些 lmlx 魔法进行扩展。例如,lxml 维护每个元素的父关系,而 ElementTree 没有。您可以将父关系添加到 ElementTree,但这不是一个简单的示例。

我就是这么学的。

【讨论】:

  • @Tanner Hoang:你可以使用etree。我建议您使用他们网站上 ElementTree 中的 教程和示例,因为它有完整的文档记录。您可以从lxmletree 中进行编码和测试,但使用ElementTree 材料作为etree 部分lxml 的参考。代码几乎相同。这是我的观点。
猜你喜欢
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多