首先,我知道在StackOverflow上有很多关于python和lxml的问题,而且我确实阅读过大部分问题,如果不是全部的话。现在我正在寻找这个问题的更全面的答案。
我正在做一些HTML转换,我需要在语法上解析HTML,然后对href
,img
等进行一些内容更改。
这是我现在所拥有的简化版本:
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>
它们可以嵌套在其他元素中,例如div
,p
。我想要做的是以编程方式寻找这些元素;对于图像,我想提取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解析时对其他人有帮助!
答案 0 :(得分:1)
lxml
和ElementTree
是quite similar。事实上,lxml文档站点的ElementTree部分只是指向ElementTree的文档。
您可以尝试使用概述页面底部的ElementTree tutorials and examples。由于ElementTree是Python发行版的一部分,因此它往往被广泛记录(并且很容易用Google搜索)。一旦你理解了这一点,如果你需要,可以使用ElementTree中的一些lmlx魔法扩展而不是初始化。例如,lxml维护每个元素的父关系,而ElementTree则不维护。您可以向ElementTree添加父关系,但这不是一个简单的示例。
我是如何学习它的。