【发布时间】:2011-11-18 23:04:45
【问题描述】:
首先,我知道 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 解析的人有所帮助!
【问题讨论】:
-
+1 以获得明确的问题。 (而不是尝试使用正则表达式!)