3

特定の Web サイトに接続し、そこにあるすべてのリンクを取得する単純な Python スクリプトをコーディングしました。

import urllib2
import re


request = urllib2.urlopen('http://www.securitytube.net/')
content = request.read()
match = re.findall(r'<a href=".\w+.\d+">.+</a>', content)
if match:
    for i in match:
        print i + "\n"

else:
    print 'Not Found!'

結果:

<a href="/video/3878"><img class="corner iradius20  ishadow33" width="100" heigh
t="75" src="http://videothumbs.securitytube.net.s3.amazonaws.com/3878.jpg"  alt=
"avatar" /></a>

<a href="/video/3878">NodeZero Linux Review</a>

<a href="/video/3877"><img class="corner iradius20  ishadow33" width="100" heigh
t="75" src="http://videothumbs.securitytube.net.s3.amazonaws.com/3877.jpg"  alt=
"avatar" /></a>

<a href="/video/3877">Post Attack Uploading Shell in Real Time</a>

<a href="/video/3867"><img class="corner iradius20  ishadow33" width="100" heigh
t="75" src="http://videothumbs.securitytube.net.s3.amazonaws.com/3867.jpg"  alt=
"avatar" /></a>

<a href="/video/3867">Using SQLMAP in Real Time (SQLinjection WEB)</a>

<a href="/video/3866"><img class="corner iradius20  ishadow33" width="100" heigh
t="75" src="http://videothumbs.securitytube.net.s3.amazonaws.com/3866.jpg"  alt=
"avatar" /></a>
....
...
...

などのわかりやすいタイトルのリンクを取得しようとしています<a href="/video/3867">Using SQLMAP in Real Time (SQLinjection WEB)</a>

私のパターンは次のとおりです。<a href=".\w+.\d+">.+</a>

4

2 に答える 2

2

適切なパーサーの代わりに正規表現を本当に使用したい場合は、groups後でそれらを照合してアクセスできます。

http://docs.python.org/library/re.htmlを参照してください

(...)

括弧内の正規表現に一致し、グループの開始と終了を示します。グループの内容は、一致が実行された後に取得できます

試す:

request = urllib2.urlopen('http://www.securitytube.net/')
content = request.read()
match = re.findall(r'<a href="(.*?)".*>(.*)</a>', content)
if match:
    for link, title in match:
        print "link %s -> %s" % (link, title)

これは以下を出力します:

link /video/3822 -> SecurityTube SpeakUp: Cloud Computing
link /video/3587 -> 
link /video/3587 -> Securitytube Speak Up: Antivirus Evasion attacks
link /video/3489 -> 
link /video/3489 -> SecurityTube SpeakUp: ThePirateBay LOSS
link /video/3375 -> 
link /video/3375 -> SecurityTube SpeakUp: .COM and .NET Domain Seizures
link /video/3130 -> 
link /video/3130 -> SecurityTube Speak Up: The MS12-020 Fiasco!
...etc

もちろん、リンクをフィルタリングして、タイトルが一致するリンクのみが考慮されるようにすることもできます。で始まるリンク#も破棄したくなるでしょう...適切なパーサーを使用すると、より良い結果が得られます。

于 2012-04-20T15:35:06.233 に答える
0

正規表現でhtmlを解析しないでください。;-)

しかし、将来の HTML 以外の作業のために regex-fu を改善できるようにするために、正規表現が失敗している場所が 2 つあります。

  • .\w+.\d+/(これはin と一致しません/video/3877。 `"[^"]+" を試してください
  • .+、それはあらゆる文字の多くに一致します...できるだけ少なくしてみてください:.+?
于 2012-04-20T15:26:38.590 に答える