0

ウェブサイトを解析しようとしています

blahblahblah 
<a  href="THIS IS WHAT I WANT" title="NOT THIS">I DONT CARE ABOUT THIS EITHER</a>
blahblahblah 

(これらには多くのものがあり、それらすべてを何らかのトークン化された形式にしたい)。問題は、「a href」には実際には 1 つだけでなく 2 つのスペースがあることです (取得したくないスペースが 1 つある「a href」もあります)。 href') はまったく機能しません。何をすべきかについて何か提案はありますか?

ありがとう!

4

4 に答える 4

0

LXML についてはわかりませんが、間違いなく BeautifulSoup を使用<a>して、ページ上のすべてを検索し、for ループを作成して、<a href=...>正規表現パターンと一致するかどうかを確認し、一致する場合はスクラップ URL よりも確認できます。

于 2013-02-12T19:25:37.407 に答える
0

「(取得したくないスペースが1つある「a href」があるものもあります)」

これは、a と href の間に複数のスペースがある要素のみを配置する必要があることを意味すると思います。XML では、タグ名と属性の間に任意の量の空白を使用できます (スペース、タブ、改行はすべて使用できます)。空白は、テキストが解析されてドキュメント ツリーが作成されるまでに破棄されます。LXML と XPATH は、ツリーを作成するために解析された元のテキストではなく、Document ツリー内の Node オブジェクトを操作します。

1 つのオプションは、正規表現を使用して必要なテキストを見つけることです。しかし実際には、これは完全に有効な XML/HTML であるのに、わざわざいくつかのスペースを削除する必要はありません。

于 2013-02-12T20:41:37.817 に答える
0

このコードは期待どおりに動作します:

from lxml import etree

file = "file:///path/to/file.html" # can be a http URL too
doc = etree.parse(file)

print doc.xpath('//a/@href')[0]

編集:あなたが望むことをすることはできませんlxml

代わりにを使用できます。

于 2013-02-12T19:39:02.520 に答える
0

xpath 式を使用してすべてのノードを検索し、それらすべてのノードを反復処理して一致を探します。次のようにノードの文字列表現を取得できます。

etree.tostring(node)

参考までに: http://lxml.de/tutorial.html#elements-carry-attributes-as-a-dict

于 2013-02-14T12:28:03.940 に答える