通用网页正文抽取 cx-extractor
网页文章正文采集方法,以微信文章采集为例
网页文章正文采集方法,以及微信文章采集为例当我们想要将今日头条上的新闻、搜狗微信上的文章正文内容保存下来的时候,怎么办?一篇篇复制粘贴?选择一款通用的网页数据采集器,将会使工作简单很多。
八爪鱼是一款通用的网页数据采集器,可采集互联网上的公开数据。
用户可以设置从哪个网站爬取数据,爬取那些数据,爬取什么范围的数据,什么时候去爬取数据,爬取的数据如何保存等等。
言归正传,本文将以搜狗微信的文章正文采集为例,讲解使用八爪鱼采集网页文章正文的方法。
文章正文采集,主要有两大类情况:一、采集文章正文中的文本,不含图片;二、采集文章正文中的文本和图片URL。
示例网站:/使用功能点:Xpath /search?query=XPath判断条件/tutorialdetail-1/judge.html分页列表信息采集/tutorial/fylb-70.aspx?t=1AJAX滚动教程/tutorialdetail-1/ajgd_7.htmlAJAX点击和翻页/tutorialdetail-1/ajaxdjfy_7.html一、采集文章正文中的文本,不含图片具体步骤:步骤1:创建采集任务1)进入主界面,选择“自定义模式”网页文章正文采集步骤12)将要采集的网址URL复制粘贴到网站输入框中,点击“保存网址”网页文章正文采集步骤2步骤2:创建翻页循环1)在页面右上角,打开“流程”,以展现出“流程设计器”和“定制当前操作”两个板块。
网页打开后,默认显示“热门”文章。
下拉页面,找到并点击“加载更多内容”按钮,在操作提示框中,选择“更多操作”网页文章正文采集步骤3 2)选择“循环点击单个元素”,以创建一个翻页循环网页文章正文采集步骤4由于此网页涉及Ajax技术,我们需要进行一些高级选项的设置。
选中“点击元素”步骤,打开“高级选项”,勾选“Ajax加载数据”,设置时间为“2秒”网页文章正文采集步骤5注:AJAX即延时加载、异步更新的一种脚本技术,通过在后台与服务器进行少量数据交换,可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
网页文字抓取器使用方法
网页文字抓取器使用方法市面上有很多的网页文字抓取器小工具,但是真正强大又好用的真心没几个,一般我们都是利用网页文字抓取器来轻松抓取和复制那些可见的网页文字内容,甚至是哪些页面上的内容被大面积的广告盖住看不到的网页,网页文字抓取器都可以帮你把想要的网页文字内容给抓取下来,就是这么神奇。
今天就给大家介绍一款免费网页文字抓取器抓取本文介绍使用八爪鱼采集新浪博客文章的方法。
采集网站:/s/articlelist_1406314195_0_1.html采集的内容包括:博客文章正文,标题,标签,分类,日期。
步骤1:创建新浪博客文章采集任务1)进入主界面,选择“自定义采集”2)将要采集的网址URL复制粘贴到网站输入框中,点击“保存网址”步骤2:创建翻页循环1)打开网页之后,打开右上角的流程按钮,使制作的流程可见状态。
点击页面下方的“下一页”,如图,选择“循环点击单个链接”,翻页循环创建完成。
(可在左上角流程中手动点击“循环翻页”和“点击翻页”几次,测试是否正常翻页。
)2)由于进入详情页时网页加载很慢,网址一直在转圈状态,无法立即执行下一个步骤,因此在“循环翻页”的高级选项里设置“ajax 加载数据”,超时时间设置为5秒,点击“确定”。
步骤3:创建列表循环1)鼠标点击列表目录中第一个博文,选择操作提示框中的“选中全部”。
2)鼠标点击“循环点击每个链接”,列表循环就创建完成,并进入到第一个循环项的详情页面。
由于进入详情页时网页加载很慢,网址一直在转圈状态,无法立即执行下一个步骤,因此在“点击元素”的高级选项里设置“ajax加载数据”,AJAX超时设置为3秒,点击“确定”。
3)数据提取,接下来采集具体字段,分别选中页面标题、标签、分类、时间,点击“采集该元素的文本”,并在上方流程中修改字段名称。
鼠标点击正文所在的地方,点击提示框中的右下角图标,扩大选项范围,直至包括全部正文内容。
(笔者测试点击2下就全部包括在内了)同样选择“采集该元素的文本”,修改字段名称,数据提取完毕。
一种网页正文抽取的方法[发明专利]
专利名称:一种网页正文抽取的方法专利类型:发明专利
发明人:涂波
申请号:CN201310538575.4
申请日:20131104
公开号:CN103530429A
公开日:
20140122
专利内容由知识产权出版社提供
摘要:本发明提供了一种网页正文抽取的方法,该方法包括以下步骤:I、网页预处理;II、寻找所述网页中的最长串;III、创建DOM树,根据DOM查找所述最长串对应的节点;IV、根据所述最长串对应的节点的标签确定起始节点和结束节点;V、对所述起始节点和结束节点进行检查过滤;VI、输出过滤后的起始节点和结束节点中的文本。
该方法针对模板或者分块技术在新闻内容抽取应用上的不足,基于最长串寻找种子段落,提高网页正文抽取的工作效率和准确率。
申请人:北京中搜网络技术股份有限公司
地址:100191 北京市海淀区学院路51号首亨科技大厦0902室
国籍:CN
代理机构:北京安博达知识产权代理有限公司
代理人:徐国文
更多信息请下载全文后查看。
网页内容抓取工具哪个好用
网页内容抓取工具哪个好用互联网上目前包含大约几百亿页的数据,这应该是目前世界上最大的可公开访问数据库。
利用好这些内容,是相当有意思的。
而网页内容抓取工具则是一种可以将网页上内容,按照自己的需要,导出到本地文件或者网络数据库中的软件。
合理有效的利用,将能大大提高自己的竞争力。
网页内容抓取工具有哪些1. 八爪鱼八爪鱼是一款免费且功能强大的网站爬虫,用于从网站上提取你需要的几乎所有类型的数据。
你可以使用八爪鱼来采集市面上几乎所有的网站。
八爪鱼提供两种采集模式 - 简易模式和自定义采集模式,非程序员可以快速习惯使用八爪鱼。
下载免费软件后,其可视化界面允许你从网站上获取所有文本,因此你可以下载几乎所有网站内容并将其保存为结构化格式,如EXCEL,TXT,HTML或你的数据库。
2、ParseHubParsehub是一个很棒的网络爬虫,支持从使用AJAX技术,JavaScript,cookie 等的网站收集数据。
它的机器学习技术可以读取,分析然后将Web文档转换为相关数据。
Parsehub的桌面应用程序支持Windows,Mac OS X和Linux等系统,或者你可以使用浏览器中内置的Web应用程序。
作为免费软件,你可以在Parsehub中设置不超过五个publice项目。
付费版本允许你创建至少20private项目来抓取网站。
3、ScrapinghubScrapinghub是一种基于云的数据提取工具,可帮助数千名开发人员获取有价值的数据。
它的开源视觉抓取工具,允许用户在没有任何编程知识的情况下抓取网站。
Scrapinghub使用Crawlera,一家代理IP第三方平台,支持绕过防采集对策。
它使用户能够从多个IP和位置进行网页抓取,而无需通过简单的HTTP API进行代理管理。
Scrapinghub将整个网页转换为有组织的内容。
如果其爬虫工具无法满足你的要求,其专家团队可以提供帮助。
4、Dexi.io作为基于浏览器的网络爬虫,Dexi.io允许你从任何网站基于浏览器抓取数据,并提供三种类型的爬虫来创建采集任务。
C#实现网页正文提取算法
C#实现⽹页正⽂提取算法思路:1、抓取远程⽹页源码,这⾥要实现⾃动判断⽹页编码,否则有可能抓到乱码。
我是先看应答的 http头的chareset,⼀般这个很准,但像csdn的新闻⽐较变态http应答的头⾥的chareset和⽹页的meta⾥声明的 chareset不⼀致,所以我⼿⼯加了⼀下判断,如果不⼀致再在内存流⾥⽤⽹页声明的编码读取⼀遍源码2、把⽹页分割成⼏⼤块。
试⽤了⼀下tidy的.net包装及HtmlParse的.net版本,都不太好⽤。
于是我⾃⼰写了个算法,可以把⽹页⾥的div 块,td块等都提取出来,⽀持嵌套的情况。
⼀般只提取div的⽂字块⼉就⾏了。
3、把汉字少于200的⽂本块去了,⼀般少于200字的⽂本块不会是正⽂,即便是正⽂,⼀般来说也不会有太多的价值,我直接去掉。
4、因为div⽀持嵌套,所以剩下的⽂本块,有可能是重复的,⼀个是另⼀个的⽗节点,所以要把最⾥层的⽂本块找出来,最⾥层的⽂本块肯定是汉字最多的,⽽其它⽂本最少的,所以要计算出剩余⽂本块中汉字占所有字符⽐例最⾼的⽂本块,基本上它就是正⽂的⽂本块了。
当然有的⽹页正⽂⾥也可能还有div的⽂本块,这时候可能会判断错误,但只要正⽂嵌套的Div⽂本块的汉字少于200字,我的算法还是能准确提取正⽂⽂本块的。
这⼀步我⽤写了⼀个⾃定义的⽅法传递给 List的Sort⽅法。
5、把<p><br>等标签替换成特殊占位符[p][br]等,因为最终的正⽂需要保留段落和回车换⾏等格式。
这⼀步⽤正则实现。
6、把最后剩下的⽂本块的html标签去掉,我⽤正则过滤的。
7、吧[p]替换成回车换⾏加俩空格,吧[br]替换成回车换⾏,这步也⽤正则。
到此,正⽂提取完毕主要代码:public class GetMainContentHelper{///<summary>///判断两段⼉⽂本⾥哪个中⽂占的⽐例⾼///</summary>///<param name="x"></param>///<param name="y"></param>///<returns></returns>public static int CompareDinosByChineseLength(string x, string y){if (x == null){if (y == null){return 0;}else{return -1;}}else{if (y == null){return 1;}else{Regex r = new Regex("[\u4e00-\u9fa5]");float xCount = (float)(r.Matches(x).Count) / (float)x.Length;float yCount = (float)(r.Matches(y).Count) / (float)y.Length;int retval = pareTo(yCount);if (retval != 0){return retval;}else{return pareTo(y);}}}}///<summary>///获取⼀个⽹页源码中的标签列表,⽀持嵌套,⼀般或去div,td等容器///</summary>///<param name="input"></param>///<param name="tag"></param>///<returns></returns>public static List<string> GetTags(string input, string tag){StringReader strReader = new StringReader(input);int lowerThanCharCounter = 0;int lowerThanCharPos = 0;Stack<int> tagPos = new Stack<int>();List<string> taglist = new List<string>();int i = 0;while (true){try{int intCharacter = strReader.Read();if (intCharacter == -1) break;char convertedCharacter = Convert.ToChar(intCharacter);if (lowerThanCharCounter > 0){if (convertedCharacter == '>'){lowerThanCharCounter--;string biaoqian = input.Substring(lowerThanCharPos, i - lowerThanCharPos + 1);if (biaoqian.StartsWith(string.Format("<{0}", tag))){tagPos.Push(lowerThanCharPos);}if (biaoqian.StartsWith(string.Format("</{0}", tag))){if (tagPos.Count < 1)continue;int tempTagPos = tagPos.Pop();string strdiv = input.Substring(tempTagPos, i - tempTagPos + 1);taglist.Add(strdiv);}}}if (convertedCharacter == '<'){lowerThanCharCounter++;lowerThanCharPos = i;}}finally{i++;}}return taglist;}///<summary>///获取指定⽹页的源码,⽀持编码⾃动识别///</summary>///<param name="url"></param>///<returns></returns>public static string getDataFromUrl(string url){string str = string.Empty;HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);//设置http头request.AllowAutoRedirect = true;request.AllowWriteStreamBuffering = true;request.Referer = "";request.Timeout = 10 * 1000;erAgent = "";HttpWebResponse response = null;try{response = (HttpWebResponse)request.GetResponse();if (response.StatusCode == HttpStatusCode.OK){//根据http应答的http头来判断编码string characterSet = response.CharacterSet;Encoding encode;if (characterSet != ""){if (characterSet == "ISO-8859-1"){characterSet = "gb2312";}encode = Encoding.GetEncoding(characterSet);}else{encode = Encoding.Default;}//声明⼀个内存流来保存http应答流Stream receiveStream = response.GetResponseStream();MemoryStream mStream = new MemoryStream();byte[] bf = new byte[255];int count = receiveStream.Read(bf, 0, 255);while (count > 0){mStream.Write(bf, 0, count);count = receiveStream.Read(bf, 0, 255);}receiveStream.Close();mStream.Seek(0, SeekOrigin.Begin);//从内存流⾥读取字符串StreamReader reader = new StreamReader(mStream, encode);char[] buffer = new char[1024];count = reader.Read(buffer, 0, 1024);while (count > 0){str += new String(buffer, 0, count);count = reader.Read(buffer, 0, 1024);}//从解析出的字符串⾥判断charset,如果和http应答的编码不⼀直//那么以页⾯声明的为准,再次从内存流⾥重新读取⽂本Regex reg =new Regex(@"<meta[\s\S]+?charset=(.*)""[\s\S]+?>",RegexOptions.Multiline | RegexOptions.IgnoreCase);MatchCollection mc = reg.Matches(str);if (mc.Count > 0){string tempCharSet = mc[0].Result("$1");if (pare(tempCharSet, characterSet, true) != 0){encode = Encoding.GetEncoding(tempCharSet);str = string.Empty;mStream.Seek(0, SeekOrigin.Begin);reader = new StreamReader(mStream, encode);buffer = new char[255];count = reader.Read(buffer, 0, 255);while (count > 0){str += new String(buffer, 0, count);count = reader.Read(buffer, 0, 255);}}}reader.Close();mStream.Close();}}catch (Exception ex){Trace.TraceError(ex.ToString());}finally{if (response != null)response.Close();}return str;}///<summary>///从⼀段⽹页源码中获取正⽂///</summary>///<param name="input"></param>///<returns></returns>public static string GetMainContent(string input){string reg1 = @"<(p|br)[^<]*>";string reg2 =@"(\[([^=]*)(=[^\]]*)?\][\s\S]*?\[/\1\])|(?<lj>(?=[^\u4E00-\u9FA5\uFE30-\uFFA0,."");])<a\s+[^>]*>[^<]{2,}</a>(?=[^\u4E00-\u9FA5\uFE30-\uFFA0,."");]))|(?<Style> <style[\s\S]+?/style>)|(?<select><select[\s\S]+?/select>)|(?<Script><script[\s\S]*?/script>)|(?<Explein><\!\-\-[\s\S]*?\-\->)|(?<li><li(\s+[^>]+)?>[\s\S]*?/li>)|(?<Html></? \s*[^> ]+(\s*[^=>]+?=['""]?[^""']+?['""]?)*?[^\[<]*>)|(?<Other>&[a-zA-Z]+;)|(?<Other2>\#[a-z0-9]{6})|(?<Space>\s+)|(\&\#\d+\;)";//1、获取⽹页的所有div标签List<string> list = GetTags(input, "div");//2、去除汉字少于200字的divList<string> needToRemove = new List<string>();foreach (string s in list){Regex r = new Regex("[\u4e00-\u9fa5]");if (r.Matches(s).Count < 300){needToRemove.Add(s);}}foreach (string s in needToRemove){list.Remove(s);}//3、把剩下的div按汉字⽐例多少倒序排列,list.Sort(CompareDinosByChineseLength);if (list.Count < 1){return "";}input = list[list.Count - 1];//4、把p和br替换成特殊的占位符[p][br]input = new Regex(reg1, RegexOptions.Multiline | RegexOptions.IgnoreCase).Replace(input, "[$1]");//5、去掉HTML标签,保留汉字input = new Regex(reg2, RegexOptions.Multiline | RegexOptions.IgnoreCase).Replace(input, "");//6、把特殊占维护替换成回车和换⾏input = new Regex("\\[p]", RegexOptions.Multiline | RegexOptions.IgnoreCase).Replace(input, "\r\n ");input = new Regex("\\[br]", RegexOptions.Multiline | RegexOptions.IgnoreCase).Replace(input, "\r\n");return input;}}测试:我测试了⼏个⼤⽹站的页⾯,效果还可以新浪博客博客园CSDN博客新浪新闻百度空间(提取的⽐较⼲净)qq新闻(把后⾯的推荐视频也提取了)搜狐新闻新华⽹新闻⽹易新闻⽹易博客CSDN新闻/n/20080411/115109.html改进:1、排序之前把超链接⽂字数量和汉字数量⽐例超过百分之50的div去掉,因为这些都是相关链接或者⽂字⼴告2、把title分词(去除停⽌词,只保留名词和动词)后和剩下的⼏个div做⽐较,把内容⾥没有title分词的⽂字块去掉,因为正⽂内容⼀般都多多少少包含标题⾥的词。
网页正文提取方法
网页正文提取方法
网页正文提取是指从网页中提取出主要内容部分的一种技术方法,常用于网页内容分析、文本挖掘和搜索引擎等领域。
以下介绍几种常用的网页正文提取方法:
1. 基于HTML结构分析:利用网页的HTML结构和标签信息,通过分析标签的层次结构和属性特征,提取出可能的正文区域。
常用的方法有基于文本标记的算法(如正文段落的密度、标签嵌套深度等),和基于行块分布函数的算法(如正文行的长度、行距等)。
2. 基于文本密度分析:通过计算网页上文本的密度,提取出文本密度较高的区域作为正文区域。
常用的方法有基于文本行分割的算法(如基于文字行的密度变化、连续空行的数量等),和基于文字块分割的算法(如基于文本块的字数、字符密度等)。
3. 基于机器学习的方法:通过训练一个机器学习模型,将正文区域分类为正文和非正文区域。
常用的方法有基于支持向量机(SVM)的分类算法、基于朴素贝叶斯分类(NB)的算法、和基于深度学习的算法(如卷积神经网络CNN)等。
4. 基于文本特征的方法:通过分析正文和非正文区域的文本特征差别,提取出正文区域。
常用的方法有基于关键词匹配的算法(如正文区域的关键词覆盖度、
连续关键词的数量等),和基于语义相似度的算法(如正文区域的语义相似度、文本主题相关度等)。
根据具体应用场景和需求可选择适合的方法进行网页正文提取,通常需要结合多种算法和技术手段进行综合分析和提取,提高提取的准确性和可靠性。
一种基于统计的中文网页正文抽取方法
一种基于统计的中文网页正文抽取方法
钱爱兵
【期刊名称】《情报学报》
【年(卷),期】2009(028)002
【摘要】针对抽取中文网页正文的传统方法的不足,提出一种基于统计的中文网页正文抽取方法.该方法首先利用DOM树计算文本结点的文本密度,即文本长度与HTML源码长度之比,再利用贝叶斯判别准则计算密度区分阈值,最后根据文本密度与密度区分阈值的比较结果抽取正文,即大于密度区分阈值的结点就判定为正文文本结点,小于或等于密度区分阈值的结点则判定为非正文文本结点,将所有判定为正文文本结点的文本连接起来即为要抽取的网页正文.通过使用中文新闻类网页对该方法的有效性进行验证,结果表明:该方法虽然简单,但是抽取准确率极高且易于实现.【总页数】8页(P187-194)
【作者】钱爱兵
【作者单位】南京中医药大学经贸管理学院,南京,210046
【正文语种】中文
【中图分类】G35
【相关文献】
1.一种基于正文特征的新闻网页抽取方法 [J], 孔胜;王宇
2.一种短正文网页的正文自动化抽取方法 [J], 郗家贞;郭岩;黎强;赵岭;刘悦;俞晓明;程学旗
3.基于统计与正文特征的中文网页正文抽取研究 [J], 周佳颖;朱珍民;高晓芳
4.基于统计和机器学习的中文Web网页正文内容抽取 [J], 游贵荣;陆玉昌
5.基于正文特征和网页结构的网页正文抽取方法 [J], 胡露露;刘小勤;孙凯
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通用网页正文抽取cx-extractor
基于行块分布函数的通用网页正文抽取:线性时间、不建DOM树、与HTML标签无关对于Web信息检索来说,网页正文抽取是后续处理的关键。
虽然使用正则表达式可以准确的抽取某一固定格式的页面,但面对形形色色的HTML,使用规则处理难免捉襟见肘。
能不能高效、准确的将一个页面的正文抽取出来,并做到在大规模网页范围内通用,这是一个直接关系上层应用的难题。
作者提出了《基于行块分布函数的通用网页正文抽取算法》,首次将网页正文抽取问题转化为求页面的行块分布函数,这种方法不用建立Dom树,不被病态HTML所累(事实上与HTML 标签完全无关)。
通过在线性时间内建立的行块分布函数图,直接准确定位网页正文。
同时采用了统计与规则相结合的方法来处理通用性问题。
作者相信简单的事情总应该用最简单的办法来解决这一亘古不变的道理。
整个算法实现代码不足百行。
但量不在多,在法。
建议使用svn checkout /svn/trunk/,svn的好处是更新及时,zip包作者不能保证每次修改完后都及时上传:)There are undoubtedly serious bugs lurking somewhere in code this funky. So feel free to contact us if you meet any problem.Bug reports and other feedback are
most welcome :-)VersionAuthorEmailInstitutePerl陈鑫xchen@哈工大信息检索研究中心Java王利锋、罗磊{lfwang,lluo}@哈工大信息检索研究中心C++朱亮zhuliang@中科院计算所高级网络重点实验室PHP轩文烽xwf1788@哈工大智能技术与自然语言处理研究室C#张帆zfannn@ 中科院信息科学与工程学院。