动态网页抓取(1.正则表达式匹配;2.使用HtmlAgilityPack;(不是很熟悉) )

优采云 发布时间: 2021-10-05 23:08

  动态网页抓取(1.正则表达式匹配;2.使用HtmlAgilityPack;(不是很熟悉)

)

  等待。

  

  此过程目前有两种方法可供选择:

  1.正则表达式匹配;

  2.使用HtmlAgilityPack;(不是很熟悉)

  本文仅提供正则表达式的方法供大家学习借鉴,请各位读者见谅。

  正则表达式定位

  如果长期做数据采集工作,建议深入研究。这里是DeerChao对正则表达式的介绍,非常推荐。如果你只是想做一个课程设计,可以听我的介绍。

  “定位”过程主要使用Regex.Match()方法,返回结果为正则匹配的文本。即目标网页数据。

  让我粗略地解释一下,例如,如果您有这样的文字:

  “我20岁了。”

  我想获取年龄数据,即“20”,如何使用常规捕获?

  //...

using System.Text.RegularExpressions;

//导入正则表达式命名空间

//...

string strTest = @"I am 20 years old.";

string strResult = "";

strResult = Regex.Match(strTest, @"\d+").Value;

Console.WriteLine(strResult);

Console.ReadKey();

  OK,抓包成功!但是你可能会问,这个程序跟定位有什么关系?好吧,让我解释一下:

  您可以多次使用它: strResult = Regex.Match(strResult, @"正正").Value; 一步一步缩小网页中的数据范围,最终定位到你想到的那部分数据。

  类似于“我今年 20 岁”。您可以通过三步找到“20”

  

  然后就可以在网页上用同样的方法定位嵌套的内容(当然,如果没有嵌套的部分,也可以尝试一次性全部抓取),

  

  strResult = Regex.Match(strResult , "(?is)登录.*?更多").Value;

strResult = Regex.Match(strResult , "(?is)").Value;

  通过这两行代码,就可以定位到百度的“百度点击”按钮。当然你也可以删掉上一句,因为百度首页只有一个提交按钮。但是如果是其他网站,有多个提交按钮,那么就得重新考虑正则的写法了。

  常问问题

  定位数据的原理基本介绍完毕。相信读者会有很多疑问(文笔不好,见谅),我自己写一些吧:

  Q:匹配结果有多个值怎么办?

  A:在匹配网页数据的时候,经常会遇到多个匹配的结果,比如多个表,多个div标签等,这时候我们可以使用Match采集来接受返回的结果集,例如:

  Match采集 mcResult = Regex.Matches(strHtml, @”(?is)”);

  可以使用foreach遍历这个集合,也可以使用下标来访问元素。但请注意,您需要使用 Regex.Matches() 方法而不是 Regex.Match() 方法。你注意到了吗?这表示您可能匹配了多个结果。

  问:常规中的 (?is) 是什么意思?

  A:这是正则表达式的匹配选项,.Net中也有对应的选项

  (?i) 表示不区分大小写,相当于.net 中的 RegexOptions.IgnoreCase 选项;

  (?s) 表示让“。” 匹配换行符,即“。” 表示 [\s\S] 相当于.net 中的 RegexOptions.Singleline 选项;

  //当然还有其他问题,这里就不一一列举了,希望大家多多评论,我会尽量解答。

  三、保存数据

  保存数据的方式有很多种,比如XML格式、标签内容、直接写入数据库、保存为txt……您可以根据自己的需要选择合适的保存方式。

  但是,为了统一,我建议使用 XML 来保存内容。首先,网页中的数据基本可以转换成XML格式;其次,将XML输入到数据库中并转换为其他形式非常方便;三、XML操作 数据方便。如果需要修改数据,有很多API库之类的可以调用。总之就是好处多多,呵呵。

  @"Author: wushuai1346

Description: 不断完善中.版权所有,转载请注明出处,谢谢.

Copyright (C) 2011 wushuai1346,All Rights Reserved

Url: http://blog.csdn.net/wushuai1346/article/details/7108424

Createtime : 2011-12-28

Updatetime : 2011-12-29"

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线