[已解决]求网页抓取的正则表达式写法
本帖最后由 user11 于 2011-5-25 10:30 编辑网页抓取,想只取得 用户昵称和所在城市,可是正则表达式不会写<a class="link_1([^<]+)</a>\s*,这个截取了链接,我不需要超链接
我只想取得的内容为
昵称1 北京
昵称2 北京
昵称3 北京
不需要里面的连接地址。。请高手帮忙。。。 $Source = _INetGetSource("http://u.xxxx.com/uid=10&&")
$sR = StringRegExp($Source, '<a class="link_1([^<]+)</a>\s*',3)
_ArrayDisplay($sR, UBound($sR))源码
<div><a class="link_1"href="http://u.xxx.com/123455-1-1.html" target="_blank">昵称1</a> </div>
<div>会员</div> <div style="color: red;">北京</div>
<div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>
<div><a class="link_1"href="http://u.xxx.com/12234585-1-1.html" target="_blank">昵称12</a> </div>
<div>会员</div> <div style="color: red;">北京</div>
<div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>
<div><a class="link_1"href="http://u.xxx.com/12134385-1-1.html" target="_blank">昵称123</a> </div>
<div>会员</div> <div style="color: red;">北京</div>
<div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>
自学 自写最解决问题<a class="link.*?>(.*)(?=\<\/a)|<div\ss.*?>(.*)(?=\<\/div) 去掉html标签?<[^>]*> 回复 2# lpxx
是的 不要html 正则不懂 照猫画虎了一个
StringRegExp($Source, '<a class="link_1([^<]+)</a>\s*',3)
这样取得的结果是href="http://u.xxx.com/123455-1-1.html" target="_blank">昵称1
我只需要 昵称1和 北京 就可以了 其他都不需要谢谢 本帖最后由 papapa314 于 2011-5-24 12:08 编辑
技术不够
StringRegExp($Source, ';">(.+)</div>|">(.+)</a>',3)
提取结果:
昵称1
北京
昵称12
北京
昵称123
北京 StringRegExp($Source, '[^<>]+(?=\<\/a\>)|<div\ss.*?>(.*?)(?=\<\/div\>',3) 本帖最后由 user11 于 2011-5-24 15:52 编辑
首先非常感谢楼上的几位
回复 4# shenrenba
测试了一下。。这个代码也不错 ,,能解决问题。。。可否对代码简单注释下,想学习一下正则表达
回复 5# papapa314
你的代码抓取的东西就更多了。。好像只要带</a> 或</div> 都被自动抓取了
回复 6# 3mile
这个代码可以用,但是抓取的东西多于预期,因为网页的其他地方也存在 <div><a href="http://×××class="link_1" target=_blank></a>代码。。。所以可以不可以<aclass="link_1"这个为关键词开始截取呢,因为用户名的链接是><a class="link_1" href="http://××× target=_blank>,后面的以颜色<div style="color: red;">截取 非常感谢 回复 7# user11
看来一定要代码了
#include <Array.au3>
Local $Str = _
'<div><a class="link_1"href="http://u.xxx.com/123455-1-1.html" target="_blank">昵称1</a> </div>' & @CRLF & _
' <div>会员</div> <div style="color: red;">北京</div> ' & @CRLF & _
' <div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>' & @CRLF & @CRLF & _
' <div><a class="link_1"href="http://u.xxx.com/12234585-1-1.html" target="_blank">昵称12</a> </div>' & @CRLF & _
' <div>会员</div> <div style="color: red;">北京</div> ' & @CRLF & _
' <div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>' & @CRLF & @CRLF & _
' <div><a class="link_1"href="http://u.xxx.com/12134385-1-1.html" target="_blank">昵称123</a> </div>' & @CRLF & _
' <div>会员</div> <div style="color: red;">北京</div> ' & @CRLF & _
' <div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '[^<>]+(?=\<\/a\>)|<div\ss.*?>(.*)(?=\<\/div)', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($Test), '其中元素为: ' & $Test)
_ArrayDisplay($Test, UBound($Test))
本帖最后由 user11 于 2011-5-24 15:58 编辑
回复 8# 3mile
非常感谢,获取得东西 还是比预期的多。因为网页的源码我只贴了一部分。。其他部分包含了
我试着理解一下你的表达式。[^<>]+(?=\<\/a\>)|<div\ss.*?>(.*)(?=\<\/div) 是不是匹配了<a></a>标签中</a>之前;或者含有 <div s……></div> 我理解的是否正确?
[^<>]匹配未包含<>的任意字符
+匹配前面的子表达式一次或多次
? =\<\a> 匹配前面的</a>一次??
若源码为 如下,,那么内容1 是否也被抓取了?
那么当源码假设为
<div><a class="link_1"href="http://u.xxx.com/123455-1-1.html" target="_blank">昵称1</a> </div>
<div>会员</div> <div style="color: red;">北京</div>
<div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>
<div><span class="float_Right">2011-05-24 13:31</span>
<span class="topic"> <a href="http://u.****.com/123-5889_1.html" class="link_1" target="_blank">内容1</a> </span>
<img src="../images/005.jpg" width="72" height="12" /> </div>
<div><a class="link_1"href="http://u.xxx.com/12234585-1-1.html" target="_blank">昵称12</a> </div>
<div>会员</div> <div style="color: red;">北京</div>
<div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>
<span class="topic"> <a href="http://u.****.com/123-5889_1.html" class="link_1" target="_blank">内容12</a> </span>
<img src="../images/005.jpg" width="72" height="12" /> </div>
<div><a class="link_1"href="http://u.xxx.com/12134385-1-1.html" target="_blank">昵称123</a> </div>
<div>会员</div> <div style="color: red;">北京</div>
<div class="re_topic"> <span class="float_Right">2011-05-23 23:20</span></div>
<span class="topic"> <a href="http://u.****.com/123-5889_1.html" class="link_1" target="_blank">内容123</a> </span>
<img src="../images/005.jpg" width="72" height="12" /> </div>
准备学习一下正则表达。。。自己动手才丰衣足食。。各位能否对代码简单注视一下,,,对这个正则代码很有兴趣
StringRegExp($Source, '<a\ss.*?>(.*)(?=\<\/a)|?color[^>]+>([^<]+)',3)这个<a\ss.*?>理解不好了 回复 2# lpxx
去标签习惯<.*?> 学习。。。。。。。。
页:
[1]