免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2041 | 回复: 7
打印 上一主题 下一主题

[正则]请问采集如何识别用户标签的呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-26 18:17 |只看该作者 |倒序浏览

  1. <?
  2. $body = "()
  3.                         href='/01/22/394142.htm' target=_blank
  4.                         >哲理小品:偷不走的阳光</";
  5. $rules = "/href=\'(.+?)\' target=_blank
  6.                   >(.+?)<\//is";
  7. preg_match($rules, $body, $URL);
  8. echo $URL[1] .'和'. $URL[2];
  9. ?>
复制代码


乔乔老大,帮帮忙~~

ps:怕挨删帖,反复多次修改了帖子标题,从行动上坚决支持乔乔,老大经常在MSN上给我提供帮助,呵呵.

[ 本帖最后由 diychen 于 2005-11-26 21:40 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-11-26 20:18 |只看该作者
这是我现在所用的。


  1. <?php

  2. $str ='<a href=\'/01/22/394142.htm\' target=_blank>哲理小品:偷不走的阳光</a>';
  3. /* 超链接标题 */
  4. preg_match_all( "/>(.*?)<\/a>/i", $str, $hreft );
  5. /* 超链接内容 */
  6. preg_match_all( "/href=(\"|'|)(.*?)(\"|'|)[[:space:]]/i", $str, $hrefc );

  7. $strResult[1] = $hreft[1][0];
  8. $strResult[2] = $hrefc[2][0];

  9. echo '<pre>';
  10. print_r($strResult);
  11. echo '</pre>';

  12. ?>
复制代码


输出:

  1. Array
  2. (
  3.     [1] => 哲理小品:偷不走的阳光
  4.     [2] => /01/22/394142.htm
  5. )
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-11-26 21:24 |只看该作者
谢谢楼上的兄弟,你是不是开花石头啊?
我修改了我的PHP代码如下通过:

  1. <?
  2. $body = "()
  3.                         href='/01/22/394142.htm' target=_blank
  4.                         >哲理小品:偷不走的阳光</";

  5. $rules = "/href=\'(.+?)\'/";

  6. preg_match($rules, $body, $URL);

  7. $rules = "/>(.+?)</";

  8. preg_match($rules, $body, $TITLE);
  9. echo $TITLE[1] .'和'. $URL[1];
  10. ?>
复制代码

论坛徽章:
0
4 [报告]
发表于 2005-11-26 21:29 |只看该作者
我不是石头,这是石头逆向发布中摘取的。

论坛徽章:
0
5 [报告]
发表于 2005-11-26 21:38 |只看该作者
对了,那就顺便再问个问题,
大家注意到很多采集程序可以让用户填写[内容][标题]等标签.
但程序是怎么样判断到底采回来的内容是什么的呢?
因为我们其实最终都会帮用户将这些表达式翻译成正则,
如果我这样写:
<a href=[地址]>[标题]</a>
当然程序可以直接翻译成正则,因为很明显
preg_match后,第一个元素是地址,第二个是标题.
于是就$url = $Data[1];
$title = $Data[2];
但是假如是有这样的内容,我想做采集,用户使用了[可变数据]标签,那我们的程序如何获得呢?
HTML内容是:
<a href=/society.html>(社会)</a><a href=fdsfa87fdss8d7f9sa8.html>第一条标题</a>
<a href=/tech.html>(科技)</a><a href=fdsfa87fd87fd65of9h.html>第二条标题</a>
那么用户就必须这样写采集规则:
<a href=/[可变数据]>([可变数据])</a><a href=[地址]>[标题]</a>
那我们的程序这时候如何识别,获得地址和标题?

ps:乔乔如果觉得这个属于新的话题我就另开个新主题好了.

论坛徽章:
0
6 [报告]
发表于 2005-11-26 22:01 |只看该作者
你可以安装一下石头的逆向发布来看一看。

留意php采集也好久了,众多人普遍看法是如果要做成通用型式,还有点困难。大多是具体情况具体分析。你可以酌情为你不同的用户考虑不同“采集规则”,尽量别提供什么可变数据。网页内容千差万错。要客户在“可变”使用上遇到错误,就说你程序不爽。

考虑使用石头的流程:
先采集列表页(切取首尾不需要的内容,大多是站点栏目连接、广告之类)入库---->根据入库的列表数据,选择是否抓取(提取列表中的地址,读取远端网页内容,然后切取主要内容<标题、正文>)。

这中间都有切取首尾操作,大可向用户解释清楚,在所切取内容时的选取“首”“尾”标记,一定要是该标记在所抓网页中唯一出现的,这样的准确度也高一些。

昨晚我也忙了一宿,主要是src=的路径修正。这个标签参数在img、js、swf中经常使用,也够烦人的。好些网页并不按标准来写(如src="(双引)"    src='单引'),较为烦人的是还有比如<img name="id" src=/>这样的。

论坛徽章:
0
7 [报告]
发表于 2005-11-26 22:56 |只看该作者
呵呵,挺难的.

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
8 [报告]
发表于 2005-11-27 14:55 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP