精华内容
下载资源
问答
  • 数据爬取工具

    千次阅读 2018-08-09 19:21:00
    要玩大数据,没有数据怎么玩?这里推荐一些33款开源爬虫软件给大家。 爬虫,即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。 网络...

    要玩大数据,没有数据怎么玩?这里推荐一些33款开源爬虫软件给大家。

    爬虫,即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。

    网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

    世界上已经成型的爬虫软件多达上百种,本文对较为知名及常见的开源爬虫软件进行梳理,按开发语言进行汇总。虽然搜索引擎也有爬虫,但本次我汇总的只是爬虫软件,而非大型、复杂的搜索引擎,因为很多兄弟只是想爬取数据,而非运营一个搜索引擎。

    171

    Java爬虫
    1. Arachnid
    Arachnid是一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用。 Arachnid的下载包中包含两个spider应用程序例子用于演示如何使用该框架。

    特点:微型爬虫框架,含有一个小型HTML解析器

    许可证:GPL

    2、crawlzilla
    crawlzilla 是一个帮你轻松建立搜索引擎的自由软件,有了它,你就不用依靠商业公司的搜索引擎,也不用再烦恼公司內部网站资料索引的问题。

    由 nutch 专案为核心,并整合更多相关套件,并卡发设计安装与管理UI,让使用者更方便上手。

    crawlzilla 除了爬取基本的 html 外,还能分析网页上的文件,如( doc、pdf、ppt、ooo、rss )等多种文件格式,让你的搜索引擎不只是网页搜索引擎,而是网站的完整资料索引库。

    拥有中文分词能力,让你的搜索更精准。

    crawlzilla的特色与目标,最主要就是提供使用者一个方便好用易安裝的搜索平台。

    授权协议: Apache License 2
    开发语言: Java JavaScript SHELL
    操作系统: Linux

    项目主页: https://github.com/shunfa/crawlzilla
    下载地址: http://sourceforge.net/projects/crawlzilla/
    特点:安装简易,拥有中文分词功能

    3、Ex-Crawler
    Ex-Crawler 是一个网页爬虫,采用 Java 开发,该项目分成两部分,一个是守护进程,另外一个是灵活可配置的 Web 爬虫。使用数据库存储网页信息。

    授权协议: GPLv3
    开发语言: Java
    操作系统: 跨平台
    特点:由守护进程执行,使用数据库存储网页信息

    4、Heritrix
    Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。

    Heritrix采用的是模块化的设计,各个模块由一个控制器类(CrawlController类)来协调,控制器是整体的核心。

    代码托管:https://github.com/internetarchive/heritrix3

    授权协议: Apache
    开发语言: Java
    操作系统: 跨平台
    特点:严格遵照robots文件的排除指示和META robots标签

    5、heyDr
    heyDr

    heyDr是一款基于java的轻量级开源多线程垂直检索爬虫框架,遵循GNU GPL V3协议。

    用户可以通过heyDr构建自己的垂直资源爬虫,用于搭建垂直搜索引擎前期的数据准备。

    授权协议: GPLv3
    开发语言: Java
    操作系统: 跨平台
    特点:轻量级开源多线程垂直检索爬虫框架

    6、ItSucks
    ItSucks是一个java web spider(web机器人,爬虫)开源项目。支持通过下载模板和正则表达式来定义下载规则。提供一个swing GUI操作界面。

    特点:提供swing GUI操作界面

    7、jcrawl
    jcrawl是一款小巧性能优良的的web爬虫,它可以从网页抓取各种类型的文件,基于用户定义的符号,比如email,qq.

    授权协议: Apache
    开发语言: Java
    操作系统: 跨平台
    特点:轻量、性能优良,可以从网页抓取各种类型的文件

    8、JSpider
    JSpider是一个用Java实现的WebSpider,JSpider的执行格式如下:

    jspider [URL] [ConfigName]

    URL一定要加上协议名称,如:http://,否则会报错。如果省掉ConfigName,则采用默认配置。

    JSpider 的行为是由配置文件具体配置的,比如采用什么插件,结果存储方式等等都在conf[ConfigName]\目录下设置。JSpider默认的配置种类 很少,用途也不大。但是JSpider非常容易扩展,可以利用它开发强大的网页抓取与数据分析工具。要做到这些,需要对JSpider的原理有深入的了 解,然后根据自己的需求开发插件,撰写配置文件。

    授权协议: LGPL
    开发语言: Java
    操作系统: 跨平台
    特点:功能强大,容易扩展

    9、Leopdo
    用JAVA编写的web 搜索和爬虫,包括全文和分类垂直搜索,以及分词系统

    授权协议: Apache
    开发语言: Java
    操作系统: 跨平台
    特点:包括全文和分类垂直搜索,以及分词系统

    10、MetaSeeker(GooSeeker)
    是一套完整的网页内容抓取、格式化、数据集成、存储管理和搜索解决方案。

    网络爬虫有多种实现方法,如果按照部署在哪里分,可以分成:

    服务器侧:

    一般是一个多线程程序,同时下载多个目标HTML,可以用PHP, Java, Python(当前很流行)等做,可以速度做得很快,一般综合搜索引擎的爬虫这样做。但是,如果对方讨厌爬虫,很可能封掉你的IP,服务器IP又不容易 改,另外耗用的带宽也是挺贵的。建议看一下Beautiful soap。

    客户端:

    一般实现定题爬虫,或者是聚焦爬虫,做综合搜索引擎不容易成功,而垂直搜诉或者比价服务或者推荐引擎,相对容易很多,这类爬虫不是什么页面都 取的,而是只取你关系的页面,而且只取页面上关心的内容,例如提取黄页信息,商品价格信息,还有提取竞争对手广告信息的,搜一下Spyfu,很有趣。这类 爬虫可以部署很多,而且可以很有侵略性,对方很难封锁。

    MetaSeeker中的网络爬虫就属于后者。

    MetaSeeker工具包利用Mozilla平台的能力,只要是Firefox看到的东西,它都能提取。

    MetaSeeker工具包是免费使用的,下载地址:www.gooseeker.com/cn/node/download/front

    特点:网页抓取、信息提取、数据抽取工具包,操作简单

    11、Playfish
    playfish是一个采用java技术,综合应用多个开源java组件实现的网页抓取工具,通过XML配置文件实现高度可定制性与可扩展性的网页抓取工具

    应用开源jar包包括httpclient(内容读取),dom4j(配置文件解析),jericho(html解析),已经在 war包的lib下。

    这个项目目前还很不成熟,但是功能基本都完成了。要求使用者熟悉XML,熟悉正则表达式。目前通过这个工具可以抓取各类论坛,贴吧,以及各类CMS系统。像Discuz!,phpbb,论坛跟博客的文章,通过本工具都可以轻松抓取。抓取定义完全采用XML,适合Java开发人员使用。

    使用方法:

    下载右边的.war包导入到eclipse中,
    使用WebContent/sql下的wcc.sql文件建立一个范例数据库,
    修改src包下wcc.core的dbConfig.txt,将用户名与密码设置成你自己的mysql用户名密码。
    然后运行SystemCore,运行时候会在控制台,无参数会执行默认的example.xml的配置文件,带参数时候名称为配置文件名。
    系统自带了3个例子,分别为baidu.xml抓取百度知道,example.xml抓取我的javaeye的博客,bbs.xml抓取一个采用 discuz论坛的内容。

    授权协议: MIT
    开发语言: Java
    操作系统: 跨平台
    特点:通过XML配置文件实现高度可定制性与可扩展性

    12、Spiderman
    Spiderman 是一个基于微内核+插件式架构的网络蜘蛛,它的目标是通过简单的方法就能将复杂的目标网页信息抓取并解析为自己所需要的业务数据。

    怎么使用?

    首先,确定好你的目标网站以及目标网页(即某一类你想要获取数据的网页,例如网易新闻的新闻页面)

    然后,打开目标页面,分析页面的HTML结构,得到你想要数据的XPath,具体XPath怎么获取请看下文。

    最后,在一个xml配置文件里填写好参数,运行Spiderman吧!

    授权协议: Apache
    开发语言: Java
    操作系统: 跨平台
    特点:灵活、扩展性强,微内核+插件式架构,通过简单的配置就可以完成数据抓取,无需编写一句代码

    13、webmagic
    webmagic的是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。

    webmagic

    webmagic采用完全模块化的设计,功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化),支持多线程抓取,分布式抓取,并支持自动重试、自定义UA/cookie等功能。

    webmagic

    webmagic包含强大的页面抽取功能,开发者可以便捷的使用css selector、xpath和正则表达式进行链接和内容的提取,支持多个选择器链式调用。

    webmagic的使用文档:http://webmagic.io/docs/

    查看源代码:http://git.oschina.net/flashsword20/webmagic

    授权协议: Apache
    开发语言: Java
    操作系统: 跨平台
    特点:功能覆盖整个爬虫生命周期,使用Xpath和正则表达式进行链接和内容的提取。

    备注:这是一款国产开源软件,由 黄亿华贡献

    14、Web-Harvest
    Web-Harvest是一个Java开源Web数据抽取工具。它能够收集指定的Web页面并从这些页面中提取有用的数据。Web-Harvest主要是运用了像XSLT,XQuery,正则表达式等这些技术来实现对text/xml的操作。

    其实现原理是,根据预先定义的配置文件用httpclient获取页面的全部内容(关于httpclient的内容,本博有些文章已介绍),然后运用XPath、XQuery、正则表达式等这些技术来实现对text/xml的内容筛选操作,选取精确的数据。前两年比较火的垂直搜索(比如:酷讯等)也是采用类似的原理实现的。Web-Harvest应用,关键就是理解和定义配置文件,其他的就是考虑怎么处理数据的Java代码。当然在爬虫开始前,也可以把Java变量填充到配置文件中,实现动态的配置。

    授权协议: BSD
    开发语言: Java
    特点:运用XSLT、XQuery、正则表达式等技术来实现对Text或XML的操作,具有可视化的界面

    15、WebSPHINX
    WebSPHINX是一个Java类包和Web爬虫的交互式开发环境。Web爬虫(也叫作机器人或蜘蛛)是可以自动浏览与处理Web页面的程序。WebSPHINX由两部分组成:爬虫工作平台和WebSPHINX类包。

    授权协议:Apache

    开发语言:Java

    特点:由两部分组成:爬虫工作平台和WebSPHINX类包

    16、YaCy
    YaCy基于p2p的分布式Web搜索引擎.同时也是一个Http缓存代理服务器.这个项目是构建基于p2p Web索引网络的一个新方法.它可以搜索你自己的或全局的索引,也可以Crawl自己的网页或启动分布式Crawling等.

    授权协议: GPL
    开发语言: Java Perl
    操作系统: 跨平台
    特点:基于P2P的分布式Web搜索引擎

    Python爬虫
    17、QuickRecon
    QuickRecon是一个简单的信息收集工具,它可以帮助你查找子域名名称、perform zone transfe、收集电子邮件地址和使用microformats寻找人际关系等。QuickRecon使用python编写,支持linux和 windows操作系统。

    授权协议: GPLv3
    开发语言: Python
    操作系统: Windows Linux
    特点:具有查找子域名名称、收集电子邮件地址并寻找人际关系等功能

    18、PyRailgun
    这是一个非常简单易用的抓取工具。支持抓取javascript渲染的页面的简单实用高效的python网页爬虫抓取模块

    授权协议: MIT
    开发语言: Python
    操作系统: 跨平台 Windows Linux OS X
    特点:简洁、轻量、高效的网页抓取框架

    备注:此软件也是由国人开放

    github下载:https://github.com/princehaku/pyrailgun#readme

    19、Scrapy
    Scrapy 是一套基于基于Twisted的异步处理框架,纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便~

    授权协议: BSD
    开发语言: Python
    操作系统: 跨平台
    github源代码:https://github.com/scrapy/scrapy

    特点:基于Twisted的异步处理框架,文档齐全

    C++爬虫
    20、hispider
    HiSpider is a fast and high performance spider with high speed

    严格说只能是一个spider系统的框架, 没有细化需求, 目前只是能提取URL, URL排重, 异步DNS解析, 队列化任务, 支持N机分布式下载, 支持网站定向下载(需要配置hispiderd.ini whitelist).

    特征和用法:

    基于unix/linux系统的开发
    异步DNS解析
    URL排重
    支持HTTP 压缩编码传输 gzip/deflate
    字符集判断自动转换成UTF-8编码
    文档压缩存储
    支持多下载节点分布式下载
    支持网站定向下载(需要配置 hispiderd.ini whitelist )
    可通过 http://127.0.0.1:3721/ 查看下载情况统计,下载任务控制(可停止和恢复任务)
    依赖基本通信库libevbase 和 libsbase (安装的时候需要先安装这个两个库)、
    工作流程:

    从中心节点取URL(包括URL对应的任务号, IP和port,也可能需要自己解析)
    连接服务器发送请求
    等待数据头判断是否需要的数据(目前主要取text类型的数据)
    等待完成数据(有length头的直接等待说明长度的数据否则等待比较大的数字然后设置超时)
    数据完成或者超时, zlib压缩数据返回给中心服务器,数据可能包括自己解析DNS信息, 压缩后数据长度+压缩后数据, 如果出错就直接返回任务号以及相关信息
    中心服务器收到带有任务号的数据, 查看是否包括数据, 如果没有数据直接置任务号对应的状态为错误, 如果有数据提取数据种link 然后存储数据到文档文件.
    完成后返回一个新的任务.
    授权协议: BSD

    开发语言: C/C++

    操作系统: Linux

    特点:支持多机分布式下载, 支持网站定向下载

    21、larbin
    larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发。larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。Larbin只是一个爬虫,也就 是说larbin只抓取网页,至于如何parse的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin也不提供。一个简单的larbin的爬虫可以每天获取500万的网页。

    利用larbin,我们可以轻易的获取/确定单个网站的所有链接,甚至可以镜像一个网站;也可以用它建立url 列表群,例如针对所有的网页进行 url retrive后,进行xml的联结的获取。或者是 mp3,或者定制larbin,可以作为搜索引擎的信息的来源。

    授权协议: GPL
    开发语言: C/C++
    操作系统: Linux
    特点:高性能的爬虫软件,只负责抓取不负责解析

    22、Methabot
    Methabot 是一个经过速度优化的高可配置的 WEB、FTP、本地文件系统的爬虫软件。

    授权协议: 未知
    开发语言: C/C++
    操作系统: Windows Linux
    特点:过速度优化、可抓取WEB、FTP及本地文件系统

    源代码:http://www.oschina.net/code/tag/methabot

    C#爬虫
    23、NWebCrawler
    NWebCrawler是一款开源,C#开发网络爬虫程序。

    特性:

    可配置:线程数,等待时间,连接超时,允许MIME类型和优先级,下载文件夹。
    统计信息:URL数量,总下载文件,总下载字节数,CPU利用率和可用内存。
    Preferential crawler:用户可以设置优先级的MIME类型。
    Robust: 10+ URL normalization rules, crawler trap avoiding rules.
    授权协议: GPLv2

    开发语言: C#

    操作系统: Windows

    项目主页:http://www.open-open.com/lib/view/home/1350117470448

    特点:统计信息、执行过程可视化

    24、Sinawler
    国内第一个针对微博数据的爬虫程序!原名“新浪微博爬虫”。

    登录后,可以指定用户为起点,以该用户的关注人、粉丝为线索,延人脉关系搜集用户基本信息、微博数据、评论数据。

    该应用获取的数据可作为科研、与新浪微博相关的研发等的数据支持,但请勿用于商业用途。该应用基于.NET2.0框架,需SQL SERVER作为后台数据库,并提供了针对SQL Server的数据库脚本文件。

    另外,由于新浪微博API的限制,爬取的数据可能不够完整(如获取粉丝数量的限制、获取微博数量的限制等)

    本程序版权归作者所有。你可以免费: 拷贝、分发、呈现和表演当前作品,制作派生作品。 你不可将当前作品用于商业目的。

    5.x版本已经发布! 该版本共有6个后台工作线程:爬取用户基本信息的机器人、爬取用户关系的机器人、爬取用户标签的机器人、爬取微博内容的机器人、爬取微博评论的机器人,以及调节请求频率的机器人。更高的性能!最大限度挖掘爬虫潜力! 以现在测试的结果看,已经能够满足自用。

    本程序的特点:

    6个后台工作线程,最大限度挖掘爬虫性能潜力!
    界面上提供参数设置,灵活方便
    抛弃app.config配置文件,自己实现配置信息的加密存储,保护数据库帐号信息
    自动调整请求频率,防止超限,也避免过慢,降低效率
    任意对爬虫控制,可随时暂停、继续、停止爬虫
    良好的用户体验
    授权协议: GPLv3

    开发语言: C# .NET

    操作系统: Windows

    25、spidernet
    spidernet是一个以递归树为模型的多线程web爬虫程序, 支持text/html资源的获取. 可以设定爬行深度, 最大下载字节数限制, 支持gzip解码, 支持以gbk(gb2312)和utf8编码的资源; 存储于sqlite数据文件.

    源码中TODO:标记描述了未完成功能, 希望提交你的代码.

    授权协议: MIT
    开发语言: C#
    操作系统: Windows
    github源代码:https://github.com/nsnail/spidernet

    特点:以递归树为模型的多线程web爬虫程序,支持以GBK (gb2312)和utf8编码的资源,使用sqlite存储数据

    26、Web Crawler
    mart and Simple Web Crawler是一个Web爬虫框架。集成Lucene支持。该爬虫可以从单个链接或一个链接数组开始,提供两种遍历模式:最大迭代和最大深度。可以设置 过滤器限制爬回来的链接,默认提供三个过滤器ServerFilter、BeginningPathFilter和 RegularExpressionFilter,这三个过滤器可用AND、OR和NOT联合。在解析过程或页面加载前后都可以加监听器。介绍内容来自Open-Open

    开发语言: Java
    操作系统: 跨平台
    授权协议: LGPL
    特点:多线程,支持抓取PDF/DOC/EXCEL等文档来源

    27、网络矿工
    网站数据采集软件 网络矿工采集器(原soukey采摘)

    Soukey采摘网站数据采集软件是一款基于.Net平台的开源软件,也是网站数据采集软件类型中唯一一款开源软件。尽管Soukey采摘开源,但并不会影响软件功能的提供,甚至要比一些商用软件的功能还要丰富。

    授权协议: BSD
    开发语言: C# .NET
    操作系统: Windows
    特点:功能丰富,毫不逊色于商业软件

    PHP爬虫
    28、OpenWebSpider
    OpenWebSpider是一个开源多线程Web Spider(robot:机器人,crawler:爬虫)和包含许多有趣功能的搜索引擎。

    授权协议: 未知
    开发语言: PHP
    操作系统: 跨平台
    特点:开源多线程网络爬虫,有许多有趣的功能

    29、PhpDig

    PhpDig是一个采用PHP开发的Web爬虫和搜索引擎。通过对动态和静态页面进行索引建立一个词汇表。当搜索查询时,它将按一定的排序规则显示包含关 键字的搜索结果页面。PhpDig包含一个模板系统并能够索引PDF,Word,Excel,和PowerPoint文档。PHPdig适用于专业化更 强、层次更深的个性化搜索引擎,利用它打造针对某一领域的垂直搜索引擎是最好的选择。

    演示:http://www.phpdig.net/navigation.php?action=demo

    授权协议: GPL
    开发语言: PHP
    操作系统: 跨平台
    特点:具有采集网页内容、提交表单功能

    30、ThinkUp
    ThinkUp 是一个可以采集推特,facebook等社交网络数据的社会媒体视角引擎。通过采集个人的社交网络账号中的数据,对其存档以及处理的交互分析工具,并将数据图形化以便更直观的查看。

    ThinkUp

    ThinkUp

    授权协议: GPL
    开发语言: PHP
    操作系统: 跨平台
    github源码:https://github.com/ThinkUpLLC/ThinkUp

    特点:采集推特、脸谱等社交网络数据的社会媒体视角引擎,可进行交互分析并将结果以可视化形式展现

    31、微购
    微购社会化购物系统是一款基于ThinkPHP框架开发的开源的购物分享系统,同时它也是一套针对站长、开源的的淘宝客网站程序,它整合了淘宝、天猫、淘宝客等300多家商品数据采集接口,为广大的淘宝客站长提供傻瓜式淘客建站服务,会HTML就会做程序模板,免费开放下载,是广大淘客站长的首选。

    演示网址:http://tlx.wego360.com

    授权协议: GPL

    开发语言: PHP

    操作系统: 跨平台

    ErLang爬虫
    32、Ebot
    Ebot 是一个用 ErLang 语言开发的可伸缩的分布式网页爬虫,URLs 被保存在数据库中可通过 RESTful 的 HTTP 请求来查询。

    授权协议: GPLv3
    开发语言: ErLang
    操作系统: 跨平台
    github源代码:https://github.com/matteoredaelli/ebot

    项目主页: http://www.redaelli.org/matteo/blog/projects/ebot

    特点:可伸缩的分布式网页爬虫

    Ruby爬虫
    33、Spidr
    Spidr 是一个Ruby 的网页爬虫库,可以将整个网站、多个网站、某个链接完全抓取到本地。

    开发语言: Ruby
    授权协议:MIT
    特点:可将一个或多个网站、某个链接完全抓取到本地

    本文由36大数据收集整理

    展开全文
  • 海量数据采集爬虫架构

    千次阅读 2016-03-24 15:57:58
    随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据架构体系摆在大家眼前。如何能够做到所见即所得的无阻拦式采集、如何快速把不规则页面结构化并存储、如何满足越来越多的数据采集还要在有限时间内...

    随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前。如何能够做到所见即所得的无阻拦式采集、如何快速把不规则页面结构化并存储、如何满足越来越多的数据采集还要在有限时间内采集。这篇文章结合我们自身项目经验谈一下。

    我们来看一下作为人是怎么获取网页数据的呢?

    1、打开浏览器,输入网址url访问页面内容。
    2、复制页面内容的标题、作者、内容。
    3、存储到文本文件或者excel。

    从技术角度来说整个过程主要为 网络访问、扣取结构化数据、存储。我们看一下用java程序如何来实现这一过程。

    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
    import  java.io.IOException ;
    import  org.apache.commons.httpclient.HttpClient ;
    import  org.apache.commons.httpclient.HttpException ;
    import  org.apache.commons.httpclient.HttpStatus ;
    import  org.apache.commons.httpclient.methods.GetMethod ;
    import  org.apache.commons.lang.StringUtils ;

    public  class HttpCrawler  {
            public  static  void main ( String [ ] args )  {

                 String content  =  null  ;
                  try  {
                      HttpClient httpClient  =  new HttpClient ( ) ;
                        //1、网络请求
                      GetMethod method  =  new GetMethod ( "http://www.baidu.com"  ) ;
                        int statusCode  = httpClient. executeMethod (method ) ;
                        if  (statusCode  == HttpStatus.  SC_OK )  {
                            content  = method. getResponseBodyAsString ( ) ;
                              //结构化扣取
                             String title  = StringUtils. substringBetween (content,  "<title>" ,  "</title>"  ) ;
                              //存储
                             Systemout . println (title ) ;
                       }

                 }  catch  (HttpException e )  {
                      e. printStackTrace ( ) ;
                 }  catch  ( IOException e )  {
                      e. printStackTrace ( ) ;
                 }  finally  {
                 }
           }
    }

    通过这个例子,我们看到通过httpclient获取数据,通过字符串操作扣取标题内容,然后通过system.out输出内容。大家是不是感觉做一个爬虫也还是蛮简单呢。这是一个基本的入门例子,我们再详细介绍怎么一步一步构建一个分布式的适用于海量数据采集的爬虫框架。

    整个框架应该包含以下部分,资源管理、反监控管理、抓取管理、监控管理。看一下整个框架的架构图:

    社会化海量数据抓取组件图

    • 资源管理指网站分类体系、网站、网站访问url等基本资源的管理维护;
    • 反监控管理指被访问网站(特别是社会化媒体)会禁止爬虫访问,怎么让他们不能监控到我们的访问时爬虫软件,这就是反监控机制了;

    一个好的采集框架,不管我们的目标数据在哪儿,只要用户能够看到都应该能采集到。所见即所得的无阻拦式采集,无论是否需要登录的数据都能够顺利采集。现在大部分社交网站都需要登录,为了应对登录的网站要有模拟用户登录的爬虫系统,才能正常获取数据。不过社会化网站都希望自己形成一个闭环,不愿意把数据放到站外,这种系统也不会像新闻等内容那么开放的让人获取。这些社会化网站大部分会采取一些限制防止机器人爬虫系统爬取数据,一般一个账号爬取不了多久就会被检测出来被禁止访问了。那是不是我们就不能爬取这些网站的数据呢?肯定不是这样的,只要社会化网站不关闭网页访问,正常人能够访问的数据,我们也能访问。说到底就是模拟人的正常行为操作,专业一点叫“反监控”。

    那一般网站会有什么限制呢?

    一定时间内单IP访问次数,没有哪个人会在一段持续时间内过快访问,除非是随意的点着玩,持续时间也不会太长。可以采用大量不规则代理IP来模拟。

    一定时间内单账号访问次数,这个同上,正常人不会这么操作。可以采用大量行为正常的账号,行为正常就是普通人怎么在社交网站上操作,如果一个人一天24小时都在访问一个数据接口那就有可能是机器人了。

    如果能把账号和IP的访问策略控制好了,基本可以解决这个问题了。当然对方网站也会有运维会调整策略,说到底这是一个战争,躲在电脑屏幕后的敌我双方,爬虫必须要能感知到对方的反监控策略进行了调整,通知管理员及时处理。未来比较理想应该是通过机器学习算法自动完成策略调整,保证抓取不间断。

    • 抓取管理指通过url,结合资源、反监控抓取数据并存储;我们现在大部分爬虫系统,很多都需要自己设定正则表达式,或者使用htmlparser、jsoup等软件来硬编码解决结构化抓取的问题。不过大家在做爬虫也会发现,如果爬取一个网站就去开发一个类,在规模小的时候还可以接受,如果需要抓取的网站成千上万,那我们不是要开发成百上千的类。为此我们开发了一个通用的抓取类,可以通过参数驱动内部逻辑调度。比如我们在参数里指定抓取新浪微博,抓取机器就会调度新浪微博网页扣取规则抓取节点数据,调用存储规则存储数据,不管什么类型最后都调用同一个类来处理。对于我们用户只需要设置抓取规则,相应的后续处理就交给抓取平台了。

    整个抓取使用了 xpath、正则表达式、消息中间件、多线程调度框架(参考)。xpath 是一种结构化网页元素选择器,支持列表和单节点数据获取,他的好处可以支持规整网页数据抓取。我们使用的是google插件 XPath Helper,这个玩意可以支持在网页点击元素生成xpath,就省去了自己去查找xpath的功夫,也便于未来做到所点即所得的功能。正则表达式补充xpath抓取不到的数据,还可以过滤一些特殊字符。消息中间件,起到抓取任务中间转发的目的,避免抓取和各个需求方耦合。比如各个业务系统都可能抓取数据,只需要向消息中间件发送一个抓取指令,抓取平台抓完了会返回一条消息给消息中间件,业务系统在从消息中间件收到消息反馈,整个抓取完成。多线程调度框架之前提到过,我们的抓取平台不可能在同一时刻只抓一个消息的任务;也不可能无限制抓取,这样资源会耗尽,导致恶性循环。这就需要使用多线程调度框架来调度多线程任务并行抓取,并且任务的数量,保证资源的消耗正常。

    不管怎么模拟总还是会有异常的,这就需要有个异常处理模块,有些网站访问一段时间需要输入验证码,如果不处理后续永远返回不了正确数据。我们需要有机制能够处理像验证码这类异常,简单就是有验证码了人为去输入,高级一些可以破解验证码识别算法实现自动输入验证码的目的。

    扩展一下 :所见即所得我们是不是真的做到?规则配置也是个重复的大任务?重复网页如何不抓取?

    1、有些网站利用js生成网页内容,直接查看源代码是一堆js。 可以使用mozilla、webkit等可以解析浏览器的工具包解析js、ajax,不过速度会有点慢。
    2、网页里有一些css隐藏的文字。使用工具包把css隐藏文字去掉。
    3、图片flash信息。 如果是图片中文字识别,这个比较好处理,能够使用ocr识别文字就行,如果是flash目前只能存储整个url。
    4、一个网页有多个网页结构。如果只有一套抓取规则肯定不行的,需要多个规则配合抓取。
    5、html不完整,不完整就不能按照正常模式去扣取。这个时候用xpath肯定解析不了,我们可以先用htmlcleaner清洗网页后再解析。
    6、 如果网站多起来,规则配置这个工作量也会非常大。如何帮助系统快速生成规则呢?首先可以配置规则可以通过可视化配置,比如用户在看到的网页想对它抓取数据,只需要拉开插件点击需要的地方,规则就自动生成好了。另在量比较大的时候可视化还是不够的,可以先将类型相同的网站归类,再通过抓取的一些内容聚类,可以统计学、可视化抓取把内容扣取出几个版本给用户去纠正,最后确认的规则就是新网站的规则。这些算法后续再讲。
    7、对付重复的网页,如果重复抓取会浪费资源,如果不抓需要一个海量的去重判断缓存。判断抓不抓,抓了后存不存,并且这个缓存需要快速读写。常见的做法有bloomfilter、相似度聚合、分类海明距离判断。

    • 监控管理指不管什么系统都可能出问题,如果对方服务器宕机、网页改版、更换地址等我们需要第一时间知道,这时监控系统就起到出现了问题及时发现并通知联系人。

    目前这样的框架搭建起来基本可以解决大量的抓取需求了。通过界面可以管理资源、反监控规则、网页扣取规则、消息中间件状态、数据监控图表,并且可以通过后台调整资源分配并能动态更新保证抓取不断电。不过如果一个任务的处理特别大,可能需要抓取24个小时或者几天。比如我们要抓取一条微博的转发,这个转发是30w,那如果每页线性去抓取耗时肯定是非常慢了,如果能把这30w拆分很多小任务,那我们的并行计算能力就会提高很多。不得不提的就是把大型的抓取任务hadoop话,废话不说直接上图:

    社会化海量数据抓取组件图

    今天先写到这里,后续再介绍下 日均千万大型采集项目实战。

    原创文章,转载请注明: 转载自LANCEYAN.COM

    本文链接地址: 社会化海量数据采集爬虫框架搭建

    展开全文
  • 关于对51job招聘网站信息的爬取以及可视化分析(1一数据爬取)前言一、爬虫常用库需要哪些?二、使用步骤数据爬取总结 前言 为了了解目前中国目前各职位的数量、薪资、招聘公司、岗位职责及要求,实现对某一地区...

    关于对51job招聘网站信息的爬取以及可视化分析(1一数据爬取)


    前言

    为了了解目前中国目前各职位的数量、薪资、招聘公司、岗位职责及要求,实现对某一地区人才需求分布的可视化分析,实现高校以及培训机构对人才培养的正向培养,而非做无用之功。


    一、爬虫常用库需要哪些?

    **

    请求库:实现 HTTP 请求操作

    urllib:一系列用于操作URL的功能。
    requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。
    selenium:自动化测试工具。一个调用浏览器的 driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
    aiohttp:基于 asyncio 实现的 HTTP 框架。异步操作借助于 async/await 关键字,使用异步库进行数据抓取,可以大大提高效率。
    解析库:从网页中提取信息
    beautifulsoup:html 和 XML 的解析,从网页中提取信息,同时拥有强大的API和多样解析方式。
    pyquery:jQuery 的 Python 实现,能够以 jQuery 的语法来操作解析 HTML 文档,易用性和解析速度都很好。
    lxml:支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
    tesserocr:一个 OCR 库,在遇到验证码(图形验证码为主)的时候,可直接用 OCR 进行识别。
    存储库:Python 与数据库交互
    pymysql:一个纯 Python 实现的 MySQL 客户端操作库。
    pymongo:一个用于直接连接 mongodb 数据库进行查询操作的库。
    redisdump:一个用于 redis 数据导入/导出的工具。基于 ruby 实现的,因此使用它,需要先安装 Ruby。
    爬虫框架
    Scrapy:很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如 weibo 的页面信息,这个框架就满足不了需求了。
    Crawley:高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为 JSON、XML 等。
    Portia:可视化爬取网页内容。
    newspaper:提取新闻、文章以及内容分析。
    python-goose:java 写的文章提取工具。
    cola:一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高。
    Web 框架库
    flask:轻量级的 web 服务程序,简单,易用,灵活,主要来做一些 API 服务。做代理时可能会用到。
    django:一个 web 服务器框架,提供了一个完整的后台管理,引擎、接口等,使用它可做一个完整网站。

    二、使用步骤

    数据爬取

    1. 模拟浏览器
    2. 获取网页源代码提取数据
    3. 编写正则表达式提取详情页
    4. Xpath提取内容
    5. 写入数据

    代码如下:

    import re
    import time
    import requests
    from lxml import etree
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    start_time = time.time()  # 开始时间
    f = open('job1.csv', 'w', encoding='utf-8')
    # 写入标题
    list = ['职位名称', '薪资水平', '公司名称', '公司性质', '所属行业', '职能类别', '地区', '经验要求', '学历要求', '招聘人数','发布日期','职位信息','备注']
    for a in list:
        f.write(a)
        f.write(',')
    f.write('\n')
    
    
    for i in range(1, 1000):
        print("正在爬取第" + str(i) + "页数据")
        url0 = "https://search.51job.com/list/120000,000000,0000,00,2,99,+,2,"
        url_end = ".html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare="
        url = url0 + str(i) + url_end
        res = requests.get(url=url, headers=headers)
        res.encoding = 'gbk'
        p = res.text
        ex = r'job_href\":(.*?),'  # 获取text文档后找到网址元素进行正则提取
        p1 = re.findall(ex, p)  # re.findall(匹配规则,所有内容)
        # print(res.text)
        for a in range(len(p1)):
            url = p1[a][1:-1].replace("\\", "")  # 将\\替换消失
    
            page = requests.get(url=url, headers=headers)
            page.encoding = 'gbk'
    
            tree = etree.HTML(page.text)  # 解析
            # etree.HTML()可以用来解析字符串格式的HTML文档对象,将传进去的字符串转变成_Element对象。作为_Element对象,可以方便的使用getparent()、remove()、xpath()等方法。
            #  如果想通过xpath获取html源码中的内容,就要先将html源码转换成_Element对象,然后再使用xpath()方法进行解析。
            # 获取岗位标题
            title = tree.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/text()')[0:1]
            if len(title) != 0:
                f.write(title[0])
            else:
                f.write('NULL')
            f.write(',')
            # 获取薪资水平
            salary = tree.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()')[0:1]
            # print(salary)
            if len(salary) != 0:
                f.write(salary[0])
            else:
                f.write('NULL')
            f.write(',')
    
            # 获取公司名称
            company = tree.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[1]/a[1]/text()')[0:1]
            if len(company) != 0:
                f.write(company[0])
            else:
                f.write('NULL')
            f.write(',')
            # 获取公司性质
            nature = tree.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[2]/p[1]/text()')[0:1]
            if len(nature) != 0:
                f.write(nature[0])
            else:
                f.write('NULL')
            f.write(',')
            # 获取所属行业
            industry = tree.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[2]/p[3]/a/text()')[0:1]
            if len(industry) != 0:
                f.write(industry[0])
            else:
                f.write('NULL')
            f.write(',')
            # 获取职能类别
            category = tree.xpath('/html/body/div[3]/div[2]/div[3]/div[1]/div/div[1]/p[1]/a/text()')[0:1]
            # print(category)
            if len(category) != 0:
                f.write(category[0])
            else:
                f.write('NULL')
            f.write(',')
            # 获取工作地区
            pos = tree.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[2]/@title')
            # print(pos)
            for a in pos:
                if a is not None:
                    # 获取位置
                    position = a.split(r'|')[0].replace(u'\xa0', u'')  # 字符串前加u,防止中文乱码
                    f.write(position)
                    f.write(',')
                    # 获取所需经验
                    year = a.split(r'|')[1].replace(u'\xa0', u'')
                    f.write(year)
                    f.write(',')
                    # 获取学历要求
                    degree = a.split(r'|')[2].replace(u'\xa0', u'')
                    f.write(degree)
                    f.write(',')
                    # 获取招聘人数
                    people = a.split(r'|')[-2].replace(u'\xa0', u'')
                    f.write(people)
                    f.write(',')
                    # 获取发布日期
                    day = a.split(r'|')[-1].replace(u'\xa0', u'')
                    f.write(day)
                    f.write(',')
    
    
            # 获取岗位描述与任职要求
            lst1 = tree.xpath('//div[@class="bmsg job_msg inbox"]//text()')
            a = []
            for i in lst1:
                de1 = i.replace(u'\xa0', u"")
                if len(de1) != 0:
                    a.append(de1)
    
            work = "".join(a).replace(" ", "").replace(u"\r\n", ",").replace(",", ",")  # 去掉空白、换行和英文逗号
            f.write(work)
            f.write(',')
            if len(pos) != 0:
                f.write(pos[0])
            else:
                f.write('NULL')
            f.write('\n')
        time.sleep(0.5)
    f.close()
    end_time = time.time()
    print("爬取完毕!爬取时长%s秒" % (end_time - start_time))
    

    总结

    还可以用Spider、urllib、BeautifulSoup等库实现爬取,在这就不一一展示了。

    展开全文
  • 数据爬虫对于数据分析从业者来说是必不可少的一项基础能力,学习Python的首选我也是从编写一个合格的爬虫开始的,实际的工作中经常也会遇到需要从网络上采集数据进行分析的需求,这时候就需要自己动手编写爬虫了。...

           数据爬虫对于数据分析从业者来说是必不可少的一项基础能力,学习Python的首选我也是从编写一个合格的爬虫开始的,实际的工作中经常也会遇到需要从网络上采集数据进行分析的需求,这时候就需要自己动手编写爬虫了。

           在我之前的文章《BOSS直聘数据采集、解析处理、分析与可视化实战》中,详细地讲解了基于BOSS直聘网站进行招聘数据采集的完整流程与可视化分析相关的工作,今天同样是针对招聘类的网站进行数据采集和分析,这次的 目标网站是51job,也就是我们常说的前程无忧招聘网站,对于“51job”这个名字来说我个人的理解就是谐音“我要工作”,哈哈,不知道我的理解是否正确,希望大家都可以找到自己的心仪工作吧。

         闲话就说到这里,接下来我们就开始正式的数据采集工作里。

         51job网站在这里,正好今天是西方的圣诞节,首页截图如下所示:

           就我个人的实现来说,我觉得这个网站的数据采集工作相比于BOSS直聘来说要更容易一些,接下来我们首先来分析

    展开全文
  • 前言 17年底,买了清华大学出版社出版的《Hadoop权威指南》(第四版)学习,没想到这本书质量之差,超越我的想象,然后上网一看,也是骂声...1. 用python编写爬虫,爬取豆瓣上的书籍信息,并持久化到mysql数据库...
  • 数据挖掘 文本分类 知乎问题单分类(二):爬取知乎某话题下的问题(数据爬取)爬虫目标Scrapy框架介绍Scrapy框架原理 [^1]Scrapy工作流程 [^2]具体实现安装Scrapy创建项目定义item编写存储MySQL的Pipelinespider...
  • 前两篇(一)软件安装、(二)初窥门槛我解决了软件版本不匹配的问题并学习关键技术、...经过广泛搜索,最终确定网站http://www.izaiwen.cn/为爬取对象,网站首页如下图所示。 源码 # -*- codeing = utf-8 -*- impor
  • 2.爬取电商数据

    千次阅读 2018-02-01 11:53:46
    使用webmagic爬取电商评论数据字体:1.什么是爬虫网络爬虫,也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对...
  • 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解,如网页的标签,网页的语言等知识,推荐去W3School: W3school链接进行了解 在进行爬虫之前还要有一些工具: 1.首先Python 的开发环境...
  • 大数据架构体系(数据仓库)

    千次阅读 2020-03-20 16:07:11
    1、传统大数据架构 优点 缺点 使用场景 简单,易懂,对于BI系统来说,基本思想没有发生变化,变化的仅仅是技术选型,用大数据架构替换掉BI的组件 1、没有BI下...
  • 购买基金可以参考一个法则: 最近一年、两年、三年、五年及成立以来收益率排名同类基金的前1/4 最近三个月、六个月收益率排名同类基金的前1/3 ...本文所要爬取的基金数据并不复杂(数据来源是,大部分数据可以直接通
  • 互联网上有浩瀚的数据资源,要想抓取这些数据就离不开爬虫。鉴于网上免费开源的爬虫框架多如牛毛,很多人认为爬虫定是非常简单的事情。但是如果你要定期、上规模地准确抓取各种大型网站的数据却是一项艰巨的挑战。...
  • 在整个的Python爬虫架构里,从基础到深入我分为了10个部分:HTTP、网页、基本原理、静态网页爬取、动态网页爬取、APP爬取、多协程、爬虫框架、分布式爬虫以及反爬虫机制与应对方法。 1.HTTP 使用Python网络爬虫...
  • 分布式爬取知乎 一、环境 window7 scrapy pycharm redis other PC MySQL ... 之所以选择爬取知乎,一是很多人都在爬,那么一定有它爬取价值的地方;二呢分析后才发现,知乎是一个模拟登录、信息解析...数据维度...
  • 爬虫程序是DT (Data Technology,数据技术)收集信息的基础,程序员爬取目标网站的资料后,就可以分析和建立应用了。我们关心的是科技如何给大家带来实效,进而实现目标和理想,不能应用的技术称为魔术,只能用于表演...
  • 1.1 爬取目标... 3 1.2 准备工作... 3 1.3 爬取思路... 3 1.4 爬取分析... 3 二、项目实战... 5 2.1 新建项目... 5 2.2 创建Item.. 6 2.3 提取数据... 8 2.4 数据清洗... 12 2.5数据存储... 13 2.6 ...
  • 前言随着大数据、人工智能、云计算、物联网等数字化技术的普及和广泛应用,传统的数据仓库模式,在快速发展的企业面前已然显的力不从心。数据湖,是可以容纳大量的原始数据的存储库和处理系统,已经成...
  • 对于一个要对数据进行统计分析的系统而言,搜集数据的过程是冗长枯燥的。基于这一现实,分布式爬虫系统获得了发展的契机。系统通过多台服务器的协调运行,成倍地提高了爬虫的效率。当然,分布式系统在获得效率提升的...
  • python爬取链家二手房楼盘数据信息

    千次阅读 2019-05-29 16:43:48
    前言 想看下最近房价是否能入手,抓取链家二手房、新房的信息,发现广州有些精装修88平米的3房2厅首付只要29万!...首先打开firefox浏览器,清除网页所有的历史纪录,这是为了防止以前的Cookie影响服务器返...
  • 基于 python 分布式房源数据爬取系统,为房价数据挖掘及可视化提供数据支持。采用 Scrapy 框架来开发,使用 Xpath 技术对下载的网页进行提取解析,运用 Redis 数据库做分布式,使用Mysql数据库做数据存储,同时保存与...
  • 从0开始基于python3用scrapy爬取数据

    千次阅读 2017-12-27 16:45:26
    摘要: 本文主要介绍0基础从python3的安装到...第一次爬取数据强烈推荐内网系统,免得一个代理问题就让激情退却了:   安装python3 下载地址:https://www.python.org/downloads/ 查看安装版本以验证安
  • 定时爬取疫情数据存入Mysql(爬虫篇) 进行数据分析制作疫情报告(统计篇) 使用itchat给亲人朋友发送分析报告(发送篇) 基于Django做数据屏幕(本文) 一、项目效果展示 二、项目环境介绍 如下是项目需要使用...
  • 这时候,就需要在多机上部署爬虫程序,用分布式爬虫架构,进行数据爬取。分布式爬虫的架构一般如下所示。 采用分布式爬虫架构后,带来了如下几个好处。 1,爬虫效率提高。这一点显而易见,之前是单机运
  • 无论是数据的分析还是前后端页面的数据交互,都离不开真实有效的数据。项目开发中数据甲方不可能实时提供,我们只能找到目标网站的数据进行抓取入库。 数据作用 决策支持 提升效益 数据的直接变现方式 数据资源...
  • 43 4.6 本章小结 45 5 系统测试 46 5.1 测试环境及工具 46 5.2 系统功能性测试 46 5.2.1 数据爬取功能测试 46 5.2.2 数据展示测试 49 5.3 系统非功能性测试 49 5.4 本章小结 49 6 总结与展望 50 参考文献 51 致谢 52...
  • 简介:本文主要记录了学习Scrapy框架的成果,以及Selenium模拟浏览器和SQLite数据库的简单应用。 文章目录前言一、Scrapy是...需求:利用Scrapy框架爬取<网易新闻>四大常用板块(国内、国际、军事、无人机)首
  • 上一此在介绍如何获取cookie时候已经说过,在网页开发者功能里面可以对网页进行抓包分析,详见: Python 微博爬取实战(一)爬虫参数:如何获得cookie,实现爬虫登陆...所以我们构建数据库作为服务器数据管理内核.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,109
精华内容 2,043
关键字:

数据爬取服务器架构