找回密码
 加入
搜索
查看: 6445|回复: 10

[AU3基础] [已解决]求网页抓取的正则表达式写法

  [复制链接]
发表于 2011-5-24 11:29:22 | 显示全部楼层 |阅读模式
本帖最后由 user11 于 2011-5-25 10:30 编辑

网页抓取,想只取得 用户昵称和所在城市,可是正则表达式不会写<a class="link_1([^<]+)</a>\s*,这个截取了链接,我不需要超链接
我只想取得的内容为
[1] 昵称1    北京
[2] 昵称2   北京
[3]  昵称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)
发表于 2011-5-24 11:37:07 | 显示全部楼层
去掉html标签?
<[^>]*>
 楼主| 发表于 2011-5-24 11:41:38 | 显示全部楼层
回复 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  和   北京 就可以了 其他都不需要  谢谢
发表于 2011-5-24 12:02:35 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-5-24 12:02:50 | 显示全部楼层
本帖最后由 papapa314 于 2011-5-24 12:08 编辑

技术不够


StringRegExp($Source, ';">(.+)</div>|">(.+)</a>',3)


提取结果:

[0]
[1]昵称1
[2]北京
[3]
[4]昵称12
[5]北京
[6]
[7]昵称123
[8]北京
发表于 2011-5-24 12:12:42 | 显示全部楼层
StringRegExp($Source, '[^<>]+(?=\<\/a\>)|<div\ss.*?>(.*?)(?=\<\/div\>',3)
 楼主| 发表于 2011-5-24 14:08:46 | 显示全部楼层
本帖最后由 user11 于 2011-5-24 15:52 编辑

首先非常感谢楼上的几位

回复 4# shenrenba

测试了一下。。这个代码也不错 ,,能解决问题。。。可否对代码简单注释下,想学习一下正则表达

回复 5# papapa314

你的代码抓取的东西就更多了。。好像只要带</a> 或</div> 都被自动抓取了

回复 6# 3mile
这个代码可以用,但是抓取的东西多于预期,因为网页的其他地方也存在 <div><a href="http://×××  class="link_1" target=_blank>  </a>代码。。。所以可以不可以<a  class="link_1"  这个为关键词开始截取呢,因为用户名的链接是><a class="link_1" href="http://×××   target=_blank>,后面的以颜色<div style="color: red;">截取 非常感谢
发表于 2011-5-24 14:21:29 | 显示全部楼层
回复 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), '其中[0]元素为: ' & $Test[0])
_ArrayDisplay($Test, UBound($Test))
 楼主| 发表于 2011-5-24 15:46:15 | 显示全部楼层
本帖最后由 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.*?>理解不好了
发表于 2011-5-24 16:15:01 | 显示全部楼层
回复 2# lpxx


    去标签习惯<.*?>
发表于 2011-12-21 08:35:09 | 显示全部楼层
学习。。。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-26 11:57 , Processed in 0.111625 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表