我编写了简单的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>
答案 0 :(得分: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
您当然可以过滤链接,以便只考虑具有匹配标题的链接。
你也想放弃以#
开头的链接......你知道,一个合适的解析器会给你更好的结果。
答案 1 :(得分:0)
永远不要用正则表达式解析html。 ; - )
但是为了帮助您提高正则表达式,可以改进未来的非HTML 工作,您的正则表达式失败有两个地方:
.\w+.\d+
(这与/
中的/video/3877
不符。请尝试“”[^“] +”.+
,这将与任何角色匹配...尝试尽可能少:.+?