`
mcj8089
  • 浏览: 193615 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据抓取原理及常见爬虫框架、代理示例

阅读更多
文章转自 http://www.data5u.com/
 
数据爬虫概述
 
爬虫,即网络爬虫(Web crawler),是一种自动获取网页内容的程序。
 
是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。 
 
搜索引擎的处理对象是互联网网页,日前网页数量以百亿计,所以搜索引擎首先面临的问题就是:如何能够设计出高效的下载系统,以将如此海量的网页数据传送到本地,在本地形成互联网网页的镜像备份。
 
网络爬虫即起此作用,它是搜索引擎系统中很关键也很基础的构件。
 
这里主要介绍与网络爬虫相关的技术,尽管爬虫技术经过几十年的发展,从整体框架上已相对成熟,现阶段已经有各种语言开发的成熟的爬虫项目,比如Python的Scrapy,C++的larbin,Java的Nutch等
 
但随着互联网的不断发展,也面临着一些有挑战性的新问题。
 
比如页面采用JS动态加载,IP被封禁等问题,本节课也会给出对应的解决方案。
 
数据爬虫实现原理
 
下图所示是一个通用的爬虫框架流程。
 
首先从互联网页面中精心选择一部分网页,以这些网页的链接地址作为种子URL,
 
将这些种子URL放入待抓取URL队列中,爬虫从待抓取URL队列依次读取,解析新的URL,确认这个URL没有抓取过之后,再次放入带抓取队列,
 
同时还会解析网页的内容,获取程序需要的部分,进行最终的处理(存入数据库、建索引等)。

 
上述是一个通用爬虫的整体流程,如果从更加宏观的角度考虑,处于动态抓取过程中的爬虫和互联网所有网页之间的关系,可以将互联网页面划分为5个部分:
 
1.已下载网页集合:爬虫已经从互联网下载到本地进行索引的网页集合。
 
2.已过期网页集合:由于网页数最巨大,爬虫完整抓取一轮需要较长时间,在抓取过程中,很多已经下载的网页可能过期。之所以如此,是因为互联网网页处于不断的动态变化过程中,所以易产生本地网页内容和真实互联网网页不一致的情况。
 
3.待下载网页集合:即处于上图中待抓取URL队列中的网页,这些网页即将被爬虫下载。
 
4.可知网页集合:这些网页还没有被爬虫下载,也没有出现在待抓取URL队列中,不过通过已经抓取的网页或者在待抓取URL队列中的网页,总足能够通过链接关系发现它们,稍晚时候会被爬虫抓取并索引。
 
5.不可知网页集合:有些网页对于爬虫来说是无法抓取到的,这部分网页构成了不可知网页集合。事实上,这部分网页所占的比例很高。
 
根据不同的应用,爬虫系统在许多方面存在差异,大体而言,可以将爬虫划分为如下三种类型:
 
1. 批量型爬虫(Batch Crawler):批量型爬虫有比较明确的抓取范围和目标,当爬虫达到这个设定的目标后,即停止抓取过程。至于具体目标可能各异,也许是设定抓取一定数量的网页即可,也许是设定抓取消耗的时间等。
 
2.增量型爬虫(Incremental Crawler):增量型爬虫与批量型爬虫不同,会保持持续不断的抓取,对于抓取到的网页,要定期更新,因为互联网的网页处于不断变化中,新增网页、网页被删除或者网页内容更改都很常见,而增量型爬虫需要及时反映这种变化,所以处于持续不断的抓取过程中,不是在抓取新网页,就是在更新已有网页。通用的商业搜索引擎爬虫基本都属此类。
 
3.垂直型爬虫(Focused Crawter):垂直型爬虫关注特定主题内容或者属于特定行业的网页,比如对于健康网站来说,只需要从互联网页而里找到与健康相关的页面内容即可,其他行业的内容不在考虑范围。垂直型爬虫一个最大的特点和难点就是:如何识别网页内容是否属于指定行业或者主题。从节省系统资源的角度来说,不太可能把所有互联网页面下载下来之后再去筛选,这样浪费资源就太过分了,往往需要爬虫在抓取阶段就能够动态识别某个网址是否与主题相关,并尽量不去抓墩无关页面,以达到节省资源的目的。垂直搜索网站或者垂直行业网站往往需要此种类型的爬虫。
 
常见的数据爬虫 
 
webmagic

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

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

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

Heritrix
 
Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。
 
Heritrix采用的是模块化的设计,各个模块由一个控制器类(CrawlController类)来协调,控制器是整体的核心。
 
Scrapy
 
Scrapy 是纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便~
 
Soukey
 
Soukey采摘网站数据采集软件是一款基于.Net平台的开源软件,也是网站数据采集软件类型中唯一一款开源软件。尽管Soukey采摘开源,但并不会影响软件功能的提供,甚至要比一些商用软件的功能还要丰富。多任务多线程数据采集,支持POST方式;可采集Ajax页面;支持Cookie,支持手工登录采集数据;等
 
下一课时我们要用Java语言实现一套自己的爬虫。
 
用Java实现数据爬虫
 

 
按照整体逻辑图,我们需要先确定一个要抓去的网址,分析网址源码,从这个网址中解析所有待抓取URL
 
同时从源码中解析目标内容,进行处理。
 
重复上述步骤即可。
 
1. 需要定义一个Set类用于存储待抓取URL
 
2. 定一个Set类,存储已经处理过的URL
 
HttpUrlConnection抓数据
 

无忧代理IP--专业的代理IP提供商

 
Jsoup抓数据
 
Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
 

无忧代理IP-专业的代理IP提供商

 
HtmlUnit - WebClient抓数据

无忧代理IP-专业的代理IP提供商

 
 
IP被封禁的解决方案
 
频繁抓取一个网站,最常见的问题就是IP被封,返回的Http状态码是403 Forbidden
 
这种情况下就需要更换IP,使用高匿名代理IP
 

那么IP从哪里获取呢   http://www.data5u.com/

 

分享到:
评论

相关推荐

    Python爬虫基础类库源码示例.zip

    Scrapy是一个高级的爬虫框架,提供了完整的爬取、数据处理、存储等解决方案。它支持多线程和分布式爬取,具有强大的中间件系统,可以方便地定制处理逻辑,如反反爬策略、数据清洗等。 4. **Selenium** Selenium是一...

    gginfo_博物馆爬虫参考_

    本项目"gginfo_博物馆爬虫参考_"提供了一个专门针对博物馆基本信息的爬虫框架,帮助用户高效、灵活地获取并存储所需数据。 首先,我们要理解爬虫的基本原理。爬虫通常由三部分组成:爬取、解析和存储。爬取阶段,...

    网络爬虫程序合集

    通过学习这个网络爬虫程序合集,不仅可以掌握爬虫的基础知识,还能了解到如何应对各种实际问题,这对于任何想要进入或提升在数据抓取领域的专业技能的人来说都是宝贵的资源。同时,理解并实践这些知识,将有助于你在...

    数据爬虫学校网页相关代码

    在描述中提到的"数据采集(1).docx"可能是关于爬虫数据采集的详细指南,涵盖了爬虫的基本原理、常见工具和步骤。文档可能会讲解如何使用Python的requests库发送HTTP请求,使用BeautifulSoup或lxml库解析HTML,以及...

    python版网络爬虫

    Scrapy是一个非常强大且功能全面的爬虫框架,适合处理复杂的Web抓取任务。无论是初学者还是高级用户,都可以从Scrapy提供的广泛工具和支持中受益。通过本篇文章,希望能够帮助读者更深入地理解Scrapy的各个方面,并...

    crawler4j是Java实现的开源网络爬虫

    `crawler4j` 是一个基于 Java 实现的开源网络爬虫框架,它以其易用性、高效性和灵活性而受到开发者的欢迎。这款工具主要用于抓取网页内容,为数据分析、信息提取或搜索引擎构建等任务提供数据源。在本文中,我们将...

    抓取的程序

    在中文环境中,我们通常将其称为“网络爬虫”或“数据抓取工具”。这类程序广泛应用于数据分析、市场研究、搜索引擎优化、内容监控等多个领域。本篇将深入探讨抓取程序的核心原理、常见技术以及如何构建一个简单的...

    java爬虫系统

    Java爬虫系统是一种基于Java编程语言开发的网络爬虫框架,用于自动化地抓取互联网上的信息。这个系统通常包括了数据采集、数据处理、数据存储等核心模块,可以帮助开发者高效地从网页中提取所需的数据。 在Java爬虫...

    Java专题爬虫

    Java专题爬虫是一种基于Java编程语言的网络数据抓取技术,它允许开发者自动化地从互联网上获取大量信息。Java作为一种强类型、面向对象的语言,提供了丰富的库和工具,使得开发爬虫变得更加便捷和高效。本专题主要...

    各大网站爬虫.zip

    4. **Scrapy框架**:Python中的Scrapy是一个强大的爬虫框架,它提供了完整的解决方案,包括中间件、调度器、下载器和爬虫组件,便于构建复杂的爬虫项目。 5. **异步爬虫**:使用如`asyncio`(Python)或`Webdriver`...

    zhizhu.zip_spider_爬虫_爬虫 软件_网络爬虫

    网络爬虫,也被称为网页抓取或数据抓取,是用于自动浏览互联网并下载网页的程序。在信息技术领域,爬虫被广泛应用于数据分析、搜索引擎优化、市场研究、内容监控等多个场景。 【描述】中提到的"蜘蛛源代码",指的是...

    爬虫学习资料

    使用代理服务器,可以在爬虫被禁止访问的情况下切换IP地址,从而继续进行数据抓取。文档提到了代理的设置和代理池的概念,说明了通过代理池可以有效应对网站的IP限制。 ### 正则表达式与lxml的解析方法 文档中提到...

    18-20爬虫代码V3.1_爬虫_

    9. **爬虫框架**:可能包括`Scrapy`,一个强大的爬虫框架,用于构建复杂的爬虫项目。 10. **实战案例**:通过具体的网站抓取实例,让学习者能够将理论知识应用到实践中。 总之,这个压缩包是一个全面的爬虫学习...

    自己动手写网络爬虫pdf+源代码

    - `DocCluster.zip`可能包含了一些关于文本聚类的示例,可能使用了KMeans、DBSCAN等算法,这是处理和分析大量爬取数据的一种常见方法。 - `SVM.zip`可能涉及到支持向量机(SVM)的应用,用于对爬取数据进行分类或...

    Python-DataSpider方便的使用各种爬虫数据

    在"DataSpider-master"压缩包中,包含了DataSpider项目的源代码和示例,你可以通过阅读和运行这些代码,深入了解DataSpider的工作原理和使用方法。通过不断实践和学习,你将能够利用DataSpider轻松应对各种Web爬虫...

    微博数据采集.zip

    "WeiboDataCollector-master"可能是一个包含了微博数据采集源码和相关工具的项目,它可能提供了数据采集的流程示例,帮助开发者理解和实现自己的微博数据采集系统。 四、数据处理与显示 1. 数据清洗:采集到的数据...

    自己动手写网络爬虫

    通过编写网络爬虫,我们可以批量抓取互联网上的公开数据,为各种应用提供丰富的原始素材。 首先,我们需要了解网络爬虫的基本概念。网络爬虫是一种按照预定规则自动抓取网页信息的程序,也称为网页蜘蛛或机器人。...

    zhizhu.rar_zhizhu.rar_网络爬虫_蜘蛛

    9. **爬虫框架**:虽然可以自定义实现,但现成的爬虫框架(如Python的Scrapy)也能提供便利,C#中也有一些如WebMagic的开源项目可以借鉴。 压缩包中的其他文件,如"www.newasp.net.rar"和"Internet_spider.zip"可能...

    自己动手写网络爬虫.罗刚_王振东.扫描版

    - **Scrapy**:一个强大的爬虫框架,适用于大规模的数据抓取。 #### HTML与CSS选择器 **HTML基础:** - HTML是超文本标记语言,用于构建网页结构。 - 常见标签如`<html>`、`<head>`、`<body>`、`<div>`、`<p>`等...

    短视频爬虫.zip

    在这个压缩包中,我们可能会找到实现短视频数据抓取的相关代码、教程或者配置文件。由于文件列表只有一个名为"fgsfg"的条目,它可能是误输入或者实际文件名被隐藏,因此我们无法直接获取这个子文件的具体内容。不过...

Global site tag (gtag.js) - Google Analytics