[原创]分析Html,进行信息抽取----爬虫程序(三)

其实说我写的是爬虫程序,有些大了,因为它并不是无限制的读取Html分析出Url继续爬取,我的程序的主要目的在于把一个页面中特定的内容取下来,而不用人一个页面一个页面的浏览和Ctrl+C了...

所以我没用任何Html的分析类,完全用自己的想法和知识,进行Html字符串的操作,大多集中在String 的substring的应用上了,没有使用大部分Html分析类中运用的C#索引Attribute href = tag["HREF"]处理方法.也没有用太多的正则表达式,用正则表达式取Web2.0的url时,回漏和出错,因为以前的Url都出现在href标志后,用标签等方法找到href就可以找到一个url了,现在的url可以出现在任何位置.
还好我的需求是特定网站的特定内容,所以分析的Html大部分是固定格式的,所以可以少很多适应性的处理.
这一部分的代码因为是对一个网站的,贴出来也没多大意思,讲讲我的想法吧.

先分析一下你抓取的页面,格式基本一直,比如各种搜索引擎的返回页面,某种信息的展示页面,都有一个固定的格式,分析一下,找到其中的特点,比如说一个页面里就一个table标识,而我们要的东西就在这里,那我们就可以把table做为字符串分析开始和结束的标志,在其中分析时用while循环检查是否已经走到了</table>,走到了就不用继续分析下去了,table里的内容也是这个方法,一个页面也就分析完了.这个要自己去要分析的页面找找规律,

string startTag = "</table>";//开始段标志
string endTag = "</table>";//结束段标志
string onelistTag = "<td>";
string endOnelitTag = "</td>";
string urlTag = "<a href=\"";
string endUrlTag = "\">";
string divTag = "<tr>";
string endDivTag = "</tr>";//一条目结束

看完这里可能有人就奇怪了,这样标签的处理,其实可以用XML的,因为Html和xml确实师出同门执行不同的职责,但我对xml的不熟悉让我放弃了,我貌似见过先把html转成xml文件后用xml读取方法直接取数据的方法,应该可以实现,这方面我回头再研究,这次就是用这种笨方法做完了,继续.

然后就是对这些标签的运用了,利用string里的indexof()和substring()进行机械操作.还是贴段代码看下吧...

while (contentString.IndexOf(divTag) >= 0)
{
    #region 一个循环处理一个连接条目
   ThListInfo oneInfo = new ThListInfo();
    contentString = contentString.Substring(contentString.IndexOf(divTag));

    //一个条目段字符串
   string onelist = ParseHtml.GetOneHTML(onelistTag, endOnelitTag, contentString);
    onelist = onelist.Substring(onelist.IndexOf(".") + 1);

    string subUrl = ParseHtml.GetOneHTML(urlTag, endUrlTag, onelist);
    oneInfo.Url = baseUrl + subUrl.Replace("\\r\\n\\t", "");
    oneInfo.Title = ParseHtml.DecodeHTML(onelist).Replace("\r\n\t", "");

    insertOneInfo(oneInfo);//将一条写入数据库*****当然也可以写入文件等操作*********

    contentString = contentString.Substring(contentString.IndexOf(endDivTag) + 5);//已解析区域剔除
   if (contentString.IndexOf(endTag) < 9)
        break;
    #endregion
}

这代码就是分析了一个table内的东西,这个页面里有3个table,所以用第一个出现的</table>为开端,分析了第二个table内的东西,每段东西都是一个<tr></tr>内的,也好找规律来while循环,还是需要按情况分析自己的页面.

方法是个很笨很原始的方法,效率也不是很高吧,抓取并分析了868个页面并存入数据库,大概用了不到2分钟...用html分析类可能会自己少些很多代码,方便很多...回头再研究吧,毕设又走向自然语言了...头疼

posted @ 2009-03-31 19:11  梳子  阅读(1089)  评论(0编辑  收藏  举报