使用python和lxml获取元素并更改元素文本

时间:2011-09-16 19:45:19

标签: python html lxml

首先,我知道在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 个答案:

答案 0 :(得分:1)

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

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

我是如何学习它的。