精华内容
下载资源
问答
  • 网页数据采集难点

    千次阅读 2016-11-24 11:36:25
    网页数据采集难点

    转自:http://www.bazhuayu.com/blog/wysjcjnd


    作者:keven 发布时间:2013/11/9 22:46:45 

    摘要:随着网页制作,网站技术的发展,ajax,html5,css3等新技术层出不穷,这给网页数据采集工作造成了很大的困难,让我们一起看看常见的网页数据采集都有哪些难点吧。


     



    1. 网页结构复杂多变

    网页本身是基于html这种松散的规范来建立的,而且经历了各大浏览器混战的时代,各个IT巨头都有自己的标准,并且互相不兼容,这就导致了网页结构非常复杂多变,专业的来讲,网页属于半结构化数据,也就是说他不是结构化的,而网页数据采集本身是一件由计算机来完成的工作,众所周知计算机最擅长干的就是重复性的工作,也就是说必须要有严格的规律的事情,所以网页结构多变就意味着,网页采集工具要做得好就必须能适应变化。这一点,说起来简单,实现起来确实非常之难。八爪鱼采集器利用一种非常简单的原理实现了这一点:自定义流程。我们认为只有把做一件事情的整个过程自定义化,才可以说这个软件能适应变化,因为根据不同情况,需要做不同的处理,不同的流程就是不同的处理。但是光有自定义流程还不够。要想真正适应变化,还需要组合出来的流程能处理各种情况,网页是给人看的,所以,只要每个流程步骤能模拟人的一种操作,将人上网时的各个操作步骤根据情况组合,便能在电脑中模拟出人操纵网页的情况。八爪鱼采集器兼顾计算机和人处理网页数据的特征,能够应对网页结构的复杂多变。

     

    2. 网页数据格式多样

    网页上显示的内容,除了有用的数据外,还有各种无效信息,广告,链接等等,就算是有效的信息,也有各种显示方式,列表,表格,自定义结构,列表-详情页,分页显示,甚至鼠标点击显示,鼠标滑过显示,输入验证码显示,等等,网页上出现的数据格式的多样化,也是个难点。所以要做到都能处理,提取数据的逻辑就必须很智能,而且对提取到的数据也要能进行一定的加工处理。

     

    3. 数据采用ajax异步加载

    异步加载,也叫ajax,是一种使用脚本,不重新加载整个页面,而更新部分页面数据的技术。这是目前几乎所有采集器的致命障碍。因为现在几乎所有的采集器都采用post模式,就是向web服务器发送请求,获取响应的字符串,然后分析字符串,从中截取数据。ajax会导致获取的字符串中根本就没有数据,只有脚本程序,数据是在脚本执行的时候加载的。对于post采集器而言,这是个不可逾越的障碍,因为先天原理不足以方便处理这种情况。针对这种问题,使用八爪鱼采集器就可以处理,因为八爪鱼采集器是模拟人的操作的,没有post,也没有分析字符串,只是模拟人操作网页的行为,不论网页后台采取什么方式加载数据,在数据显示到网页上的时候,八爪鱼采集器就能以可视化的方式提取到了数据。所以能轻松应对ajax加载的数据。一句话,只要你能打开一个网站并看到数据,使用八爪鱼采集器就可以抓取到这个数据。

     

    4. 网站访问频率限制

    现在几乎所有的网页数据采集工具都是单机程序,也就是说,他能利用的最大的资源就是单一电脑的所有资源,例如内存,cpu, 带宽等,在处理网页较少的时候这没问题,但是如果要采集大量网页,就不得不采取多线程等技术来加快访问网页的速度,当然对方网站一般都有一些安全措施,确保单个IP,也就是单个电脑不能访问太快,否则会造成太大的压力。当访问速度太快的时候,一般会封锁该IP,限制其继续访问,这样采集就中断了。八爪鱼采集器采用云采集,每台云采集服务器访问该网站的频率都不会太快,这就不会被封锁IP,而且八爪鱼采集器的云服务器有很多台,他们协同工作,就相当于有很多台电脑访问,所以总体的速度很快,这就达到了一个平衡点,既没有一台电脑访问一个网站频繁太高而被封锁IP的风险,也没有因此降低整体的采集速度,真正做到两全其美。

     

    5. 网站访问不稳定

    网络不稳定,这种现象非常普遍,网站也会不稳定,如果网站在一个时间访问压力过大,或者服务器出现问题,就可能不会正常响应用户查看网页的需求,对于人来说,偶尔出错不会有大问题,重新打开网页或者等待一段时间即可,然后对于网页数据采集工具而言,出现意外情况就比较麻烦,因为无论出现任何状况,人都会根据情况想出应对策略,但是程序只能按照既定的逻辑运行,一旦出现意外情况,很有可能因为不知道如何处理而崩溃或者逻辑中断。为了应对这些情况,八爪鱼采集器内置了一整套逻辑判断的方案,可以让用户自定义网站访问不稳定时候出现的各种情况该如何应对,因此,当网站出错的时候,八爪鱼采集器可以做到等待,重试,也可以做到采集其他任何用户定义的流程逻辑,比如跳过,后退再刷新等等,甚至重新打开登陆页面,重新登录等等,用户可以自定义判断条件和处理流程,所以可以处理各种不稳定的情况。

     

    6. 防采集措施

    除了上面这些难点之外,有些网站为了屏蔽某些恶意采集,复制内容,不尊重版权的做法,而采取了一些技术手段来防止别人采集,比如,验证码,点击显示数据,等等可以鉴别人和机器的措施,这在一定程度上阻止了恶意采集行为,但是也给正常的浏览和采集带来障碍。八爪鱼采集器内置了一些功能,比如识别验证码,点击元素等可以帮助用户突破这些限制。但是八爪鱼团队一直倡导的是在获取授权的情况下采集数据,也就是说,如果你需要采集一个网站的数据,那么你应该先跟网站管理员沟通,告知对方你采集的数据,采集的目的等等,经过对手同意并授权采集后,才开始采集,八爪鱼采集器虽然提供了很多技术支持,让网页数据采集变得容易,但是并不支持非法采集,特别是以恶意复制内容为唯一目的的采集,希望大家一起维护互联网规范,共同建设美好互联网环境。

     

    本文为网页数据采集系列原创文章第五篇,网页数据采集系列将对网页数据采集这一话题做全面深入的探讨,欢迎各位一起探讨,互相学习。

    讨论请加群:网页数据采集,群号:254764602,加群暗号:网页数据采集

    本文于2013年11月9日首发于“八爪鱼采集器”,转载请注明出处。


    展开全文
  • java研发网页数据采集

    2017-08-01 22:23:26
    我觉得网页数据采集是一个不道德的行为,但是我喜欢。下面就说说我为什么喜欢。 某一天,小编看到喜欢的网页,很欣赏这个原创作者的作品,但由于小编穷,没法开通vip去下载资源,所以小编就运用一些网络技术进行...

    我觉得网页数据采集是一个不道德的行为,但是我喜欢。下面就说说我为什么喜欢。
    这里写图片描述
    某一天,小编看到喜欢的网页,很欣赏这个原创作者的作品,但由于小编穷,没法开通vip去下载资源,所以小编就运用一些网络技术进行网页数据采集,一不小心就采集下来了。
    这里写图片描述
    采集只是采集了静态页面和图片,深度采集可以采集其css和js。
    原创作者肯定讨厌小编了。。。
    源文件的:
    这里写图片描述
    采集后的:
    这里写图片描述

    采集后可对数据进行整理,如批量修改其名称,可观看这篇文章:
    http://blog.csdn.net/sinat_15153911/article/details/72625959

    原创作品应该得到尊重的,尊重的前提是交一些马路费。如想获取java研发网页数据采集的java源代码,这个采集是用java做的,可以加QQ490647751获取。

    全CSDN的丰(好)色(se)博客,这里有书本看不到的Java技术,电影院禁播的电影,欢迎关注QQ群494808400

    展开全文
  • Java实现网页数据采集

    千次阅读 2018-05-15 21:35:08
    最近,由于某些需要,用Java制做了一个网页数据采集器,用于将网页中需要的数据采集下来。</p> 这里使用的方法,是先得到要采集的网页的源代码,然后从源代码中使用正则表达式得到要采集的数据。 ...
                    <div class="markdown_views">
                <p>最近,由于某些需要,用Java制做了一个网页数据采集器,用于将网页中需要的数据采集下来。</p>
    

    这里使用的方法,是先得到要采集的网页的源代码,然后从源代码中使用正则表达式得到要采集的数据。


    用以下代码,我们就可以得到要采集数据的网站的源代码,并且在控制台输出。

            String urlStr = ""; // 网址
            try {
                //创建一个url对象来指向要采集信息的网址
                URL url = new URL(urlStr);
                //将读取到的字节转化为字符
                InputStreamReader inStrRead = new InputStreamReader(url.openStream(),"utf-8");
                //读取InputStreamReader转化成的字符
                BufferedReader bufRead = new BufferedReader(inStrRead); 
                //读到的内容不为空
                while (bufRead.readLine() != null) {
                    System.out.println(bufRead.readLine());
                }
                bufRead.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    测试一下,这里使

    String urlStr = "http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp?&lang=";
    • 1

    在控制台输出如下结果。
    源码

    得到网页的源代码之后,我们就可以使用正则表达式来得到要采集的数据。

    我们先查看网页源代码,对源代码进行分析。
    源码
    这里写图片描述

    这里想要采集的数据是

    • 城市
    • 时间
    • AQI指数
    • 空气质量级别

    以北京市为例进行分析,我们得到如下正则表达式

        // 城市正则
        private String regularCity = ">[\u4e00-\u9fa5]{2,}市</td>"; 
        // 日期正则
        private String regularDate = ">(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))</td>";
        // AQI指数正则
        private String regularAQI = ">[0-9]{2,}</td>"; 
        // 空气质量级别正则
        private String regularQuality = ">[\u4e00-\u9fa5]</td>"; 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们先定义一个方法,使用我们定义的正则表达式和得到的网页源代码采集数据。

        /*
         * 从网页源代码中采集数据
         * 
         * @param regular 正则
         * 
         * @param code 源代码
         */
        public String DataAcqu(String regular, String code) {
             // 编译正则表达式
            Pattern p = Pattern.compile(regular, Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(code);
    
            if (m.find()) {
                // 返回采集到的数据
                return m.group();
            } else {
                return "";
            }
        }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    然后就可以进行数据采集了。

        public DataCode() {
            // 用户输入网页地址
            Scanner scan = new Scanner(System.in); 
            // 存储用户输入的网页地址
            String urlStr = scan.nextLine(); 
    
            try {
                //创建一个url对象来指向要采集信息的网址
                URL url = new URL(urlStr); 
                //将读取到的字节转化为字符
                InputStreamReader inStrRead = new InputStreamReader(url.openStream(),
                        "utf-8"); 
                //读取InputStreamReader转化成的字符
                BufferedReader bufRead = new BufferedReader(inStrRead);
                String readStr = "";
                // 创建一个DataAcqu类的对象(前面自己定义的用于采集数据的类)
                DataAcqu dataAcq = new DataAcqu();
    
                int i = 0; // 记录采集到的数据数量
                // 如果读到的数据不为空
                while ((readStr = bufRead .readLine()) != null) {
                    // 采集城市数据
                    String cityStr = dataAcq.DataAcqu(regularCity, readStr);
                    // 如果采集到符合条件的数据,打印出来
                    if (!cityStr.equals("")) {
                     // 将采集到的数据前后多余部分去掉(前面正则表达式为了准确取到相应的值,加入了">"和"</td>")
                        cityStr = cityStr.substring(1, cityStr.indexOf("</td>"));
                        System.out.println("城市:" + cityStr);
                    }
    
                    // 采集日期数据
                    String dateStr = dataAcq.DataAcqu(regularDate, readStr);
                    // 如果采集到符合条件的数据,打印出来
                    if (!dateStr.equals("")) {
                        dateStr = dateStr.substring(1, dateStr.indexOf("</td>"));
                        System.out.println("日期:" + dateStr);
                    }
    
                    // 采集AQI指数数据
                    String AQIStr = dataAcq.DataAcqu(regularAQI, readStr);
                    // 如果采集到符合条件的数据,打印出来
                    if (!AQIStr.equals("")) {
                        AQIStr = AQIStr.substring(1, AQIStr.indexOf("</td>"));
                        System.out.println("AQI指数:" + AQIStr);
                    }
    
                    // 采集空气质量级别数据
                    String qualityStr = dataAcq.DataAcqu(regularQuality, readStr);
                    // 如果采集到符合条件的数据,打印出来
                    if (!qualityStr.equals("")) {
                        qualityStr = qualityStr.substring(1,
                                qualityStr.indexOf("</td>"));
                        System.out.println("空气质量级别:" + qualityStr);
                        System.out.println();
                        i++;
                    }
                }
                br.close(); // 读取完成后关闭读取器
                System.out.println("采集完成,共采集到数据:" + i);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    运行后,控制台输出如下信息
    结果

    如果想要将输出结果输出的文件中,只需在代码中添加如下代码

                // 将数据输出到文件
                PrintStream ps = new PrintStream("E:\\Java\\DataAcquisition\\data");
                //将输出位置切换到文件
                System.setOut(ps);
    • 1
    • 2
    • 3
    • 4

    结果

    这样,我们的网页数据采集器就完成了。


    展开全文
  • 特性爬山虎采集器是一款全新的网页数据采集工具。作为一款工具软件,我们:放弃了花哨的界面,换之以快速流畅的体验。放弃了复杂的规则配置,开发了智能的自动提取算法。在基于浏览器的可视化操作上,同时保留了快速...

    特性

    爬山虎采集器是一款全新的网页数据采集工具。作为一款工具软件,我们:

    1. 放弃了花哨的界面,换之以快速流畅的体验。
    2. 放弃了复杂的规则配置,开发了智能的自动提取算法。
    3. 在基于浏览器的可视化操作上,同时保留了快速的 HTTP 引擎架构。

    爬山虎采集器在保持了用户体验、用户低学习成本的同时,兼顾了软件的数据抓取效率。

    数据采集

    爬山虎采集器能够采集互联网上的绝大部分网页,比如动态网页、静态网页、单页程序、表格数据、列表数据、文章数据、搜索引擎结果、下载图片等等。

    发布数据

    在采集到数据后,还可以发布到 CSV、Excel、MySQL、SQLite、Access、MSSQL、以及网站 API 接口上。

    当然爬山虎采集器作为一个新上场的选手,跟前辈们相比,可能会有些缺点、问题。

    欢迎您下载试用,并且给我们提供宝贵的意见。(如果你懒得下载,可以看下网站首页的演示视频:)

    爬山虎采集器网站

    展开全文
  • 网页数据采集系统

    千次阅读 2006-04-06 15:14:00
    摘要: 本文档详细介绍了网页数据采集系统的架构和运行机理。 第一章简单介绍了Spider的设计意图和模块构成。 第二章简单介绍了Spider.Crawler层如何抓取网页并落地。 第三章简单介绍了Spider.Parser层如何解析落地...
  • 网页数据采集策略

    2018-01-31 09:26:11
    1.非结构化数据 正则表达式(re) Xpath(lxml) css选择器(bs4) 2.结构化数据 json(json) xml 3.动态html 动态页面 ajax:分析xhr javascript,jquery:请求的数据都是js加载之前的,所以要解析js(困难),或执行js...
  • 提供封装好的小红书数据采集接口,通过手机自动化实时采集,接口稳定。 接口使用详情请参考接口文档。 已支持接口列表如下: 小红书关键字搜索 小红书用户信息详情 小红书用户笔记列表 小红书单个笔记详细数据...
  • 网页数据采集爬虫研究

    千次阅读 2017-05-08 22:35:35
    数据采集的方式 采用国内现成的采集工具 通用类: 如火车头,八爪鱼等,gooseeker.com等,有配置页面,可定义规则,八爪鱼号称有抓取国内主流电商网站的版本。 专用类 天猫店铺商品采集工具 v1.0 免费版 ...
  • 网页数据采集-webcollector学习与实践

    千次阅读 2017-03-20 15:26:46
    网页采集之webcollector简介
  • Java网页数据采集器[上篇-数据采集]

    千次阅读 2017-01-11 12:29:26
    这期我们来学习下如何读取网页源代码,并通过group正则 动态抓取我们需要的网页数据.同时在接下来的几期,我们将继续学习 [数据存储] 如何将抓取的比赛数据存到数据库(MySql),  [数据查询] 怎样查询我们想看的比赛...
  • 现在研究人员越来越多的数据都是来自互联网,我们需要使用网页数据采集的技术来获得数据,但是很多时候获得数据的时候需要向网站提交数据,所以,我们需要用到抓包工具,一个非常好用的抓包工具就是httpwatch,今天...
  • 网页数据采集实现

    千次阅读 2012-12-19 15:05:39
    网站统计中的数据收集原理及实现 ...网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。...目前主流的数据收集方式基本都是基于javascript
  • 下面我们进行网页数据采集的第四篇教程,这篇教程突然转向新浪微博,因为微博数据是我们进行数据挖掘的时候经常用到的,想要使用微博的数据,就得先申请一个app key ,app key其实就是一个应用的ID,有了这个ID新浪...
  • https://2ciyo.taobao.com/search.htm?spm=a1z10.3-c.w4002-4459427387.1.zE8LsC&search=y 以上是要采集网页网页前台显示,是有内容的 可以查看源码,很多数据都不存在了 不知道 是怎么回事儿,求大神指点
  • 截取到网页数据是js加载完以后的 HtmlWeb webClient = new HtmlWeb(); string _url = "http://news.baidu.com/"; HtmlAgilityPack.HtmlDocument html1 = webClient.Load(_url);//是你需要解析的url
  • 网络爬虫,也称为网页采集数据抓取,主要是指通过超文本传输协议(HTTP)或网络浏览器获取网页上有用的数据。 阅读更多:网络爬虫:它是如何开始的并将如何发展 2.网络爬虫是否合法? 网络爬虫本身并不违法,因为...
  • java网页数据采集

    千次阅读 2013-10-12 15:14:25
    使用正则表达式进行采集html页面 利用java自身的HtmlParser http://www.cnblogs.com/longwu/archive/2012/01/03/2310588.html
  • C#网页数据采集(二)WebBrowser

    千次阅读 2015-11-20 15:03:37
    WebBrowser是一个.NET控件类(设置下web脚本错误忽略)支持获取页面加载完毕的源码,而不是初始化的源码 用到了一个web的一个文档全部加载事件: 调用方法: ...//web浏览百度新闻页面    private void ...
  • C#网页数据采集(一)HtmlAgilityPack

    千次阅读 2015-11-20 10:17:10
    页面已经正常显示,百度页面加载是通过js加载,所以取的数据不完全:标题的链接竟然只是普通的文字,翻到最后发现后续是通过js去加载的数据 HtmlAgilityPack获取的是源代码就是页面组成的代码...
  • java网页数据采集器(上篇-数据采集)

    千次阅读 2012-10-11 19:13:34
    原文出处... 关于group正则  说到正则表达式是如何帮助java进行html页面采集,这里需要提一下正则表达式中的group方法(代码如下).   import java.util.regex.Matcher; import java.util.regex.Patte
  • Java网页数据采集器[初篇-数据采集]

    千次阅读 2013-01-26 15:11:41
    这期我们来学习下如何读取网页源代码,并通过group正则 动态抓取我们需要的网页数据.同时在接下来的几期,我们将继续学习 [数据存储] 如何将抓取的比赛数据存到数据库(MySql),  [数据查询] 怎样查询我们想看的比赛...
  • asp.net/C#网页数据采集

    2012-06-19 16:59:12
    早在以前就听说过数据采集这个神奇的功能,当时对这个是多么的... 在好奇的动力下,开始疯狂的查阅以及学习关于网页采集,数据采集等相关信息。不过网上大部都是asp的和php的,关于.net的很少。无奈之下只要硬着头
  • java网页数据采集(中篇-数据存储)

    千次阅读 2012-10-11 21:42:36
    上期我们学习了html页面的数据采集,为了方便我们今后来调用收集到的数据,首先我们需要学习下如何将这些采集到的数据存储起来(MySql数据库). 打开MySql数据库,创建数据库 和表 (拷贝如下代码 到mysql里(如果没有...
  • 2005-2-5[搜索技术] 通用网页数据采集系统的架构和运行机理 # 本文档详细介绍了网页数据采集系统的架构和运行机理。第一章简单介绍了Spider的设计意图和模块构成。第二章简单介绍了Spider.Crawler层如何抓取网页并...
  • 数据采集页面 2011-2012赛季英超球队战绩   如果是初学者 以下可能对你有帮助 Java如何操作MySql?  在使用java 操作MySql数据库之前 我们需要在项目文件中导入 一个jar包(mysql-connector
  • 采集APP推广数据 受害者地址 https://www.cpajia.com/ 环境 Python3.6 pycharm requests time csv 相关库用 pip install 安装即可 获取数据内容 cap之家数据是动态数据加载的~ 开发者工具...
  • httpwatch是ie浏览器下的抓包工具,也就是一个小插件,我们在上一篇文章中讲了如何启动httpwatch,今天我们将如何使用httpwatch进行抓包,明天的文章中,我们将会讲到如何使用这些抓到的包进行模拟登陆网页,所以你...
  • 假如我们使用vba来采集新浪微博的数据,我们最好是使用新浪微博开放平台api进行采集,当然,想要使用api必须有app key,在上一篇文章【新浪微博app key申请教程】中我们介绍了app key的申请方法,如果你还没有key,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,960
精华内容 16,784
关键字:

网页数据采集