怎样解析网页中文章的标题和正文?

sunyanzi 2003-11-19 05:26:28
对于一篇网页中的文章,怎样解析得到它的标题和正文呢?尤其是怎样得到正文?(注意要的不是HTML源文件中的<TITLE>...<TITLE>和<BODY>...<BODY>部分)

比如 http://www.csdn.net/news/newstopic/14/14098.shtml 中的文章,
其标题应该是“Sun中国工程院明年投入1.5亿 主攻3G等五方向”,
其正文应该是“Sun公司……技术应用中心。”

怎样通过程序解析得到呢?谢谢!

给出思路、算法的可以到
http://expert.csdn.net/Expert/topic/2472/2472952.xml?temp=.3453028和
http://expert.csdn.net/Expert/topic/2472/2472932.xml?temp=.9409449
中给分
...全文
163 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
houwenqiang 2003-11-20
  • 打赏
  • 举报
回复
我自己做过一个分析的过程,对于正文部分字符数比较多的页面,取正文基本上是正确的,标题的准确率稍微低一些,如果要求不搞可以凑合用。只能为你提供dll。你可以在这个地址下载
http://www.hylanda.com/cgi-bin/download/download.asp?id=3
apao 2003-11-20
  • 打赏
  • 举报
回复
1 通过com接口进行转化(IHTMLDocument2),但是缺点页面的文字都被转化了,包括与文章无用的链接
2 通过文本扫描,对HTML中TABLE内文字进行分析,根据该段文字长度在所有文字长度中的比例,设定一个阀值,来判断是否为内容部分.正则表达式可以完成HTML语言的解析,但去除无用链接还得自己分析.确实要作很细致的工作.
sunyanzi 2003-11-20
  • 打赏
  • 举报
回复
我想大家可能误解我的意思了,我要的是一种方法,能够去除页面文字中无用的部分,例如与文章无用的链接等。

比如就本网页来说,我要的是大家的回答内容,而不需要其它的如“人才招聘 — 山东山大联润信息... 国风因特软件(北...”等这些东西。

有点类似搜索引擎的功能,搜索引擎应该是在文章正文中搜索要匹配的查询项目,而不会在页面文字的其它部分(如其它链接)去搜索,因为那样毫无意义。

但是也不能凡是链接部分都去掉,因为文章正文部分也可能含有文字链接。

网上的网页千差万别,能有什么好的算法能够比较智能、准确的解析出文章正文吗?
cityyokel 2003-11-20
  • 打赏
  • 举报
回复
去除HTML页面中的标签、脚本块应该可以得到大部分的内容文本。
lanfanghelanfanghe 2003-11-19
  • 打赏
  • 举报
回复
用XML文档解析,你的到它的XML,然后
1 #import "msxml4.dll"
using namespace MSXML2;

2 MSXML2::IXMLDOMDocumentPtr xml_File;
MSXML2::IXMLDOMElementPtr xml_Root;
MSXML2::IXMLDOMElementPtr xml_Element;
TV_INSERTSTRUCT tvinsert;


3 CoInitialize(NULL);
xml_File.CreateInstance(_T("msxml2.domdocument"));
_variant_t varXml(_T("D:your.xml"));
_variant_t varOut((bool)TRUE);
varOut = xml_File->load(varXml);
if ((bool)varOut == FALSE)
{// show error description - IXMLDOMParseError sample
MSXML2::IXMLDOMParseErrorPtr errPtr = xml_File->GetparseError();
// print error details
}
else
{
xml_Root = xml_File->documentElement;
//::MessageBox(NULL, xml_Root->xml, _T("Document from its root"), MB_OK);
xml_Element = xml_Root->firstChild;
_bstr_t readed1;
_bstr_t readed2;
_bstr_t readed3 = "20";
readed1 = xml_Element->getAttribute("BigRoomId");
readed2 = xml_Element->getAttribute("Title");
AddToTree(readed2);
while(readed1 < "60")
{
xml_Element = xml_Element->nextSibling;//同级的节点
readed1 = xml_Element->getAttribute("BigRoomId"); readed2 = xml_Element->getAttribute("Title");
AddToTree(readed2);
}

//::MessageBox(NULL,readed2,_T("Doment form its root"),MB_OK);
}




void CTView::AddToTree(_bstr_t readed)
{

tvinsert.item.pszText = readed;
HTREEITEM hDad =m_TreeCtrl.InsertItem(&tvinsert);


}
来自MSDN 部分修改!!!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧