2011-09-16 65 views
2

まず最初に最初のpythonとlxmlの持つ要素のテキストを変更、私はすでに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> 

彼らは全くdivpのような他の要素の中にネストすることができます。私がしたいのは、それらの要素をプログラム的に探すことです。画像のために、私は、srcを抽出し、それをいくつかの操作を行うと、他の何か(src="something_images.jpg"にたとえば、src="images/something.jpg")にsrcを設定し、hrefと同じものにしたい、私はそれが他の場所を指すようにするために、それを変更したいです。

それ以外

、私はまた、例えば、それを単純化するために木からいくつかの要素を削除する:

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

私はヘッドノードとのdivを削除したいと思う、私は取得することができるだろうid="some_p"とp、親要素をつかむための方法はありますか?それらの要素を削除する方法もありますか? (この場合はparentを取得し、それを削除し、head探しheadを削除しid="some_p"を探します。

ありがとう!

を================ ==================================

UPDATE:私はすでにこれに対する解決策を発見し、すでに完成lxml.etreeを使用してコーディング。stackoverflowのが私を許す限り、私は、すぐにその答えを掲載します。私は本当に彼らはHTMLの解析に対処しなければならないとき、この質問に対する答えは、他の人に助けになることを願っています!

+0

+1明確な質問です。 (と正規表現を使用しようとしていない!) –

答えて

1

lxmlおよびElementTreeは、quite similarである。実際、lxmlドキュメントサイトのElementTree部分はElementTreeのドキュメントを指しています。

あなたは、概要ページの下部にあるElementTree tutorials and examplesを通じて働いてみてください。 ElementTreeはPythonディストリビューションの一部であるため、広く文書化されており(簡単にGoogle検索される傾向があります)。一度あなたはそれをgrok、いくつかのlmlxの魔法は、ElementTreeで必要な場合は、最初に見つからないと拡張します。たとえば、lxmlはすべての要素の親関係を維持し、ElementTreeは保持しません。 ElementTreeに親の関係を追加することはできますが、これは簡単な例ではありません。

どのように私はそれを学んだ。

+0

私はできるだけlxmlからetreeとの作業を好む:(... –

+0

@Tanner Hoang:あなたは 'etree'を使うことができます。 ElementTreeの**チュートリアルとサンプル**をサイトで使用することをお勧めします。完全に文書化されているからです。あなたは 'lxml'から' etree'でコード化してテストすることができますが、 'lxml'の' etree'部分のリファレンスとしてElementTreeマテリアルを使用します。かなり同じコードです。これが私の指摘でした。 –

関連する問題