0

正規表現を使用してサイトを解析しようとしています

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

(これらの多くがあり、トークン化された形式ですべてが必要です)。問題は、「ahref」には実際には1つではなく2つのスペースがあることです(取得したくないスペースが1つある「ahref」があるものもあります)。そのため、LXMLを使用するのは非常に面倒であることが証明されています。 (他の理由で)BeautifulSoupを使用したくない。誰かが私がこれを行う方法を知っていますか?

ありがとう!

4

3 に答える 3

0

必要な堅牢性のレベルに応じて、最初のショットでタグを取得して保存し、文字列に " " が含まれている間に " " を " " に置き換えることができます。これにより、文字列内の複数のスペースが効果的に削除されます。

正規表現を使用して HTML を解析することは推奨されないことに注意してください=)

于 2013-02-15T03:54:08.700 に答える
0

誰かがあなたと同じ質問をするたびにリンクが表示される回答に感銘を受けないようにしてください. どうやらそれは、多くの人々によって半自動的に引用される公教要理のページと見なされているようです。しかし、プログラミングでは、日常生活と同じように、カテキズムがあり、私たちが実際に何をしているのかがあります。個人的には、HTMLを正規表現で完全に解析
できるとは考えていなくても、HTMLの特定の部分の限定的な分析は正規表現で実行できると考えています。それは実用的な観点です。 そして、正規表現を使用したWebページのそのような分析を実現しています。時々、いくつかの問題がありますが、それらは開発者が管理できます。正規表現は高速です。ある時、私は Beautiful Soup が正規表現よりも 10 倍遅いことを測定しました。
lxml約50倍遅かった。
私は正規表現を使用して Web データを取得するのに比較的熟練しています。ヒントが必要な場合は、いくつか教えてください。私のメールは私のページにあります。

于 2013-02-15T04:31:15.807 に答える
-1

これがあなたの質問に答えると思います。これは、開始'a'タグのちょうど2つのスペースであるすべてのhrefを取得する正規表現のほんの2つです。

fh = open("index.html", 'r')
rawString = fh.read()   # read entire file to string
fh.close()

temp =  re.findall("<a  href=\".*?\"", rawString) 
if temp:
    for i in range(len(temp)): # process each match
        temp[i] = re.search("\".*?\"", temp[i]).group(0) # remove 'href='
    print temp    
else:
    print "Not found"

あなたの例では、出力は次のとおりです。

['"これが私が欲しいものです"']

于 2013-02-15T03:59:20.743 に答える