为了计算文本与标题相似度,需要用到标题文本。而爬数据的时候将文件名设置为url而没有用网页标题来存,所以需要解析网页提取,工程在.net平台下利用webbrowser实现的,用到了微软的mshtml。
用IHTMLDocument2.title倒是可以获得标题,但是它取得的标题有时会包含网站名如: Colorado shooting suspect sent to trial | World news | guardian.co.uk
为了计算准确,希望只有当前主题网页中的标题就是只有Colorado shooting suspect sent to trial。观察html发现一般主题网页的meta信息中会有不包含网站名的title,在格式如下的一个标签里<meta property="og:title" content="Colorado shooting suspect sent to trial"/>。于是用正则匹配IHTMLElement的outerhtml,尝试各种正则都没匹配到。
原来outerhtml中只有body结点中的html,并不包含meta信息。然后google查有什么方法获得meta中的内容,发现一个解决方法http://forums.asp.net/p/1455331/3332061.aspx。关键代码贴在这里:
- foreach (IHTMLElement el in (IHTMLElementCollection)doc.all)
- {
- // check to see if all the desired attributes were found with the correct values
- bool qualify = true;
- if (el.tagName == "META")
- {
- HTMLMetaElement meta = (HTMLMetaElement)el;
- Response.Write("Content " + meta.content +"<br/>");
- }
利用IHTMLDocument2可以获得所有标签信息,包括meta中的。然后再用正则或者字符串匹配在其中找相应的title信息,完成。