怎么抓取网页信息抓取软件?

asp.net c# 抓取页面信息方法介绍
字体:[ ] 类型:转载 时间:
我们知道,一般网页中的信息是不断翻新的,这也要求我们定期的去抓这些新信息,但是这个“定期”该怎么理解,也就是多长时间需要
抓一次该页面,其实这个定期也就是页面缓存时间,在页面的缓存时间内我们再次抓取该网页是没有必要的,反而给人家服务器造成压力
一:网页更新 我们知道,一般网页中的信息是不断翻新的,这也要求我们定期的去抓这些新信息,但是这个“定期”该怎么理解,也就是多长时间需要抓一次该页面,其实这个定期也就是页面缓存时间,在页面的缓存时间内我们再次抓取该网页是没有必要的,反而给人家服务器造成压力。 就比如说我要抓取博客园首页,首先清空页面缓存, 从Last-Modified到Expires,我们可以看到,博客园的缓存时间是2分钟,而且我还能看到当前的服务器时间Date,如果我再次 刷新页面的话,这里的Date将会变成下图中 If-Modified-Since,然后发送给服务器,判断浏览器的缓存有没有过期? 最后服务器发现If-Modified-Since &= Last-Modifined的时间,服务器也就返回304了,不过发现这cookie信息真是贼多啊 。在实际开发中,如果在知道网站缓存策略的情况下,我们可以让爬虫2min爬一次就好了,当然这些都是可以由数据团队来配置维护了, 好了,下面我们用爬虫模拟一下。
代码如下:using S using System.N namespace ConsoleApplication2 { public class Program { static void Main(string[] args) { DateTime prevDateTime = DateTime.MinV for (int i = 0; i & 10; i++) { try { var url = ""; var request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = "Head"; if (i & 0) { request.IfModifiedSince = prevDateT } request.Timeout = 3000; var response = (HttpWebResponse)request.GetResponse(); var code = response.StatusC //如果服务器返回状态是200,则认为网页已更新,记得当时的服务器时间 if (code == HttpStatusCode.OK) { prevDateTime = Convert.ToDateTime(response.Headers[HttpResponseHeader.Date]); } Console.WriteLine("当前服务器的状态码:{0}", code); } catch (WebException ex) { if (ex.Response != null) { var code = (ex.Response as HttpWebResponse).StatusC Console.WriteLine("当前服务器的状态码:{0}", code); } } } } } }二:网页编码的问题 有时候我们已经抓取到网页了,准备去解析的时候,tmd的全部是乱码,真是操蛋,比如下面这样, 或许我们依稀的记得在html的meta中有一个叫做charset的属性,里面记录的就是编码方式,还有一个要点就是response.CharacterSet这个属性中同样也记录了编码方式,下面我们再来试试看。 居然还是乱码,蛋疼了,这次需要到官网上面去看一看,到底http头信息里面都交互了些什么,凭什么浏览器能正常显示,爬虫爬过来的就不行。 查看了http头信息,终于我们知道了,浏览器说我可以解析gzip,deflate,sdch这三种压缩方式,服务器发送的是gzip压缩,到这里我们也应该知道了常用的web性能优化。
代码如下:using S using System.Collections.G using System.L using System.T using System.T using HtmlAgilityP using System.Text.RegularE using System.N using System.IO;
namespace ConsoleApplication2 { public class Program { static void Main(string[] args) { //var currentUrl = "/"; var currentUrl = "/"; var request = WebRequest.Create(currentUrl) as HttpWebR var response = request.GetResponse() as HttpWebR var encode = string.E if (response.CharacterSet == "ISO-8859-1") encode = "gb2312"; else encode = response.CharacterS S if (response.ContentEncoding.ToLower() == "gzip") { stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress); } else { stream = response.GetResponseStream(); } var sr = new StreamReader(stream, Encoding.GetEncoding(encode)); var html = sr.ReadToEnd(); } } }三:网页解析 既然经过千辛万苦拿到了网页,下一个就要解析了,当然正则匹配是个好方法,毕竟工作量还是比较大的,可能业界也比较推崇 HtmlAgilityPack这个解析工具,能够将Html解析成XML,然后可以用XPath去提取指定的内容,大大提高了开发速度,性能也不赖,毕竟Agility也就是敏捷的意思,关于XPath的内容,大家看懂W3CSchool的这两张图就OK了。
代码如下:using S using System.Collections.G using System.L using System.T using System.T using HtmlAgilityP using System.Text.RegularE using System.N using System.IO;
namespace ConsoleApplication2 { public class Program { static void Main(string[] args) { //var currentUrl = "/"; var currentUrl = "/"; var request = WebRequest.Create(currentUrl) as HttpWebR var response = request.GetResponse() as HttpWebR var encode = string.E if (response.CharacterSet == "ISO-8859-1") encode = "gb2312"; else encode = response.CharacterS S if (response.ContentEncoding.ToLower() == "gzip") { stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress); } else { stream = response.GetResponseStream(); } var sr = new StreamReader(stream, Encoding.GetEncoding(encode)); var html = sr.ReadToEnd(); sr.Close(); HtmlDocument document = new HtmlDocument(); document.LoadHtml(html); //提取title var title = document.DocumentNode.SelectSingleNode("//title").InnerT //提取keywords var keywords = document.DocumentNode.SelectSingleNode("//meta[@name='Keywords']").Attributes["content"].V } } }好了,打完收工,睡觉。。。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Java_爬虫,如何抓取Js动态生成数据的页面?_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:450,324贴子:
Java_爬虫,如何抓取Js动态生成数据的页面?收藏
很多网站是用js或Jquery 生成数据的,到后台获取到数据以后,用 document.write()或者(&#id&).html=&& 的方式 写到页面中,这个时候用浏览器查看源码是看不到数据的。HttpClient是不行的,看网上说HtmlUnit, 可以获取后台js加载完后的完整页面,但是我按照文章上说的 写了 ,都不好使。String url = &&;try {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10);
//设置webClient的相关参数
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
//webClient.getOptions().setTimeout(50000);
webClient.getOptions().setThrowExceptionOnScriptError(false);
//模拟浏览器打开一个目标网址
HtmlPage rootPage = webClient.getPage(url);
System.out.println(&为了获取js执行的数据 线程开始沉睡等待&);
Thread.sleep(3000);//主要是这个线程的等待 因为js加载也是需要时间的
System.out.println(&线程结束沉睡&);
String html = rootPage.asText();
System.out.println(html);} catch (Exception e) {}其实这段代码不好使。求解答,其中典型的就是这个链接的页面,怎么能在java程序中获取其中的数据?
福利不只是穿多穿少,还要有迷人的微笑!
我7 级都要验证码。。。。
htmlUnit是不行的,我试过试试这个,但是这个我没有尝试成功,不知道行不行
换个思路,你可以找到这个页面获取信息的出处地址:其中date是动态的,看js文件:var timstamp=(new Date()).valueOf();var url = ctx + &/main/pro!lrprolist.do?date=&+这样在java中实现获取date,之后访问地址。。。。。
怎么搞???
——From Nokia Lumia1520 大有可言 Windows Phone 8.1
直接URLConnection.open(&Servlet的地址+参数&);然后可以得到JSON数据
我勒个去,怎么代码一直被吞,截个图算了
暂时没有什么好办法,即便goolge 的爬虫,也只能执行少量的js脚本,抓取动态网页也很难
这个是可以用的!就是加载的时候会很慢
楼主问题可否解决,能否说下解决方案
3楼提的倒是可以一试
楼主解决没有,,,求支招啊!!!!
可以用selenium,但是因为用到浏览器内核去解析js,所以肯定会很慢,我到现在也没找到解决方案
请问怎么做的?我也遇到了相同的问题
解析的数据,也应该是有数据源的。你可以直接抓数据源,比如一些json数据,或许也可以避开js
卧槽。。我前段时间在抓验证码的时候就是遇到这个问题。。。原来要这么抓动态资源。。收藏一个
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或推荐这篇日记的豆列
······鲲鹏Web数据抓取 - 专业Web数据采集服务提供商
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有数千个的稳定高匿HTTP代理地址池,可以有效绕过各种反采集策略。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
什么是Web数据抓取?
Web数据抓取(,也叫Web数据采集)指的是批量、快速从网站上提取信息的一种计算机软件技术。Web数据抓取程序模拟浏览器的行为,能将可以在浏览器上显示的任何数据提取出来,因此也称为屏幕抓取(Screen scraping)。Web数据抓取的最终目的是将非结构化的信息从大量的网页中抽取出来以结构化的方式存储(CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等)。
Web数据抓取有什么用处?
任何业务运营成功的基础是拥有大量的目标用户和专业数据,谁能把握用户,谁就能占得先机。Web数据抓取服务可以帮您迅速获得大量的目标用户和专业数据,使您在降低运营成本的同时,迅速抢占先机,占领制高点。
许多的客户都直接从我们的服务或者定制软件中获益。
许多的客户都直接从我们的服务中获益。
您能把我们的服务用于以下方面:
产生您的潜在客户列表
从您的竞争对手中收集您感兴趣的信息
抓取新兴业务数据
建立您自己的产品目录
整合行业信息,辅助经营决策
建立垂直搜索引擎
Web系统自动化
舆情监控等等
Web数据抓取有什么好处?
简单: 您不需要使用任何的软件,只需要告诉我们您的目标网站和你感兴趣的内容。
弹性: 您能从任何的网站上获取任何数据,特别是动态网站上的数据。
快捷: 对于一个需要20个人工作日完成的工作,我们能在数小时内完成。
定制: 针对不同的目标网站定制采集程序,灵活应对不同的异构网站。
精确: 抽取结果的每一列都是您所需要的,不多也不少。
低价: 您可以节省无法以金钱来计量的时间和精力,以及数倍于所付费用的人工和设备投入!
Web数据抓取是否合法?
Web数据抓取程序的原理类似于搜索引擎的爬虫。
1、信息是不具有版权的,任何人都可以使用他人已公开的信息;
2、信息的组织和编撰具有版权,如果你完全使用对方网站上信息的编排方式和编排文字的话,可能存在版权侵权的行为。
QQ在线客服

我要回帖

更多关于 网页信息抓取 的文章

 

随机推荐