- 浏览: 1185550 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (350)
- Ajax研究 (2)
- javascript (22)
- struts (15)
- hibernate (12)
- spring (8)
- 我的生活 (28)
- jsp (2)
- 我的随笔 (84)
- 脑筋急转弯 (1)
- struts2 (2)
- ibatis (1)
- groovy (1)
- json (4)
- flex (20)
- Html Css (5)
- lucene (11)
- solr研究 (2)
- nutch (25)
- ExtJs (3)
- linux (6)
- 正则表达式 (2)
- xml (1)
- jetty (0)
- 多线程 (1)
- hadoop (40)
- mapreduce (5)
- webservice (2)
- 云计算 (8)
- 创业计划 (1)
- android (8)
- jvm内存研究 (1)
- 新闻 (2)
- JPA (1)
- 搜索技术研究 (2)
- perl (1)
- awk (1)
- hive (7)
- jvm (1)
最新评论
-
pandaball:
支持一下,心如大海
做有气质的男人 -
recall992:
山东分公司的风格[color=brown]岁的法国电视[/co ...
solr是如何存储索引的 -
zhangsasa:
-services "services-config ...
flex中endpoint的作用是什么? -
来利强:
非常感谢
java使用json所需要的几个包 -
zhanglian520:
有参考价值。
hadoop部署错误之一:java.lang.IllegalArgumentException: Wrong FS
网络蜘蛛现在开源的已经有好几个了,Larbin,Nutch,Heritrix都各有用户之地,要做一个自己的爬虫要解决好多个问题,比如调度算法、更新策略、分布式存储等,我们来一一看一下。
一个爬虫要做的事主要有以下这些
从一个网页入口,分析链接,一层一层的遍历,或者从一组网页入口,或者从一个rss源列表开始爬rss;
获取每个页面的源码保存在磁盘或者数据库里;
遍历抓下来的网页进行处理,比如提取正文,消重等;
根据用途把处理后的文本进行索引、分类、聚类等操作。
以上是个人理解哦,呵呵。这些过程中,大约有如下问题
如何获取网页源或者RSS源?如
果是一般的爬虫的话,就是给几个入口页面,然后顺着超链接以遍历图的算法一个页面一个页面的爬,这种情况网页源很少,可以选择从hao123等网址大全的
网站为入口开始爬。如果做垂直搜索的话就人工去收集一些这个行业的网站,形成一个列表,从这个列表开始爬。如果是爬RSS的话,需要先收集RSS源,现在
大的门户的新闻频道和主流的博客系统都有rss的功能,可以先爬一遍网站,找出rss的链接,要获取每个链接的内容,分析是否是rss格式,如果是就把这
个链接保存到rss源数据库里,以后就专门爬这个rss源的rss。还有一种就是人工来整理,一般blog的rss都是有规律的,主域名跟一个用户名后面
再跟上一个rss的固定页面,比如http://www.abc.com/user1/rss.xml,这样就弄一个用户字典,拼接rss地址,然后用程
序去探测是否有这个页面来整理出每个网站的rss源。整理出rss源后再人工设置rss源的权重及刷新时间间隔等。
如果源页面很多,如何用多线程去有效的调度处理,而不会互相等待或者重复处理?如
果现在有500万个页面要去爬,肯定要用多线程或者分布式多进程去处理了。可以把页面进行水平分割,每个线程处理一段儿,这样每个线程之间不需要同步,各
自处理各自的就行了。比如给这500W个页面分配一个自增ID,2个线程的话就让第一个线程去爬1,3,5的网页,第二个线程去爬2,4,6的网页,这样
做多个线程间基本上能均衡,而且不会相互等待,而且不会重复处理,也不会拉掉网页。每个线程一次取出1w个页面,并记录最高的源页面ID号,处理完这一批
后再从数据库里提取大于这个源页面ID号的下1W个页面,直到抓取完本线程要处理的所有页面。1w这个值根据机器的内存可做适当的调整。为了防止抓了半截
儿死机,所以要支持断点续抓,要为每个线程的处理进度保存状态,每取一批网页都要记录本线程最大的网页ID,记录到数据库里,进程重启后可以读取这个
ID,接着抓后面的页面。
如何尽量的利用CPU,尽量的不让线程处于等待、休眠、阻塞等空闲状态?而且要尽量用少的线程以减少上下文切换。爬
虫有两个地方需要IO操作,抓网页的时候需要通过网卡访问网络,抓到网页后要把内容写到磁盘或者数据库里。所以这两个部分要用异步IO操作,这样可以不用
线程阻塞在那里等待网页抓过来或者写完磁盘文件,网卡和硬盘都支持内存直接读取,大量的IO操作会在硬件驱动的队列里排队,而不消耗任何CPU。.net
的异步操作使用了线程池,不用自己频繁的创建和销毁线程,减少了开销,所以线程模型不用考虑,IO模型也不用考虑,.net的异步IO操作直接使用了完成
端口,很高效了,内存模型也不需要考虑,整个抓取过程各线程不需要访问共享资源,除了数据库里的源页面,各管各的,而且也是每个线程分段处理,可以实现无
锁编程。
如何不采集重复的网页?去重可以使用king总监的布隆过滤器,
每个线程使用一个bitarray,里面保存本批源页面上次抓取的页面的哈希值情况,抓取下来的源页面分析链接后,去这个bitarray里判断以前有没
有抓过这个页面,没有的话就抓下来,抓过的话就不管了。假设一个源页面有30个链接把,一批10W个源页面,300w个链接的bitarray应该也不会
占太大内存。所以有个五六个线程同时处理也是没问题的。
抓下来的页面更快的保存?保存到分布式文件系统还是保存在数据库里?如
果保存到磁盘,可以每个域名创建一个文件夹,凡是这个网站的页面都放到这个文件夹下,只要文件名不一样,就不会出现冲突。如果把页面保存到磁盘,数据库有
自己的一套锁管理机制,直接用bulk
copy放数据库就行了。一般频繁的写磁盘可能会引起CPU过高,而频繁的写数据库CPU还好一些。而且sqlserver2008支持filestream类型的字段,在保存大文本字段的时候有很好的性能,并且还能使用数据库的API来访问。所以我觉得如果没有GFS那样高效成熟的分布式文件系统的话还不如存sqlserver里面呢。
如何有效的根据网页的更新频率来调整爬虫的采集时间间隔?做爬虫要了解一些HTTP协议,如果要抓的网页支持Last-Modified或者ETag头,我们可以先发个head请求来试探这个页面有没有变化来决定是否要重新抓取,但是好多网站根本就不支持这个东西,所以让爬虫也很费劲,让自己的网站也会损失更多的性能。这样我们就要自己去标注每个源页面的更新时间间隔及权重,再根据这两个值去用一定的算法制定蜘蛛的更新策略。
采集下来的数据做什么用?可以抓取一个行业的网站,在本地进行分词和索引,做成垂直搜索引擎。可以用一定的训练算法对抓取下来的页面进行自动分类,做成新闻门户。也可以用死小风行的文本相似度算法处理后进行文本聚类处理。
如何不影响对方网站的性能?现在好多网站都被爬虫爬怕了,因为有些蜘蛛弄住一个网站可劲儿的爬,爬的人家网站的正常用户都无法访问了。所以好多站长想了好多办法来对付爬虫,所以我们写爬虫也要遵循机器人协议,控制单位时间内对一个网站的访问量
发表评论
-
认真阅读hadoop源码
2012-11-01 16:00 1791从新复习hadoop,认真阅读hadoop源码,有兴趣的朋友可 ... -
铁道部售票网站怎么啦?
2012-01-10 10:25 1884乐淘CTO李勇:库存同步是难点 我的判断,除了 ... -
eclipse启动报错jvm terminated. Exit code=1
2011-10-11 08:55 1236转载链接: http://wxmfly.itey ... -
ireport中获取当前时间
2011-08-28 11:53 5178一。 iReport 中获取系统当前时间 1,选择Tex ... -
ireport引java bean database
2011-08-27 10:38 1756今天帮一同事调试程序,他们的报表工具用的是ireport4.0 ... -
为了养家,只能这样!
2011-07-03 16:22 16还是一直在玩数据,hadoop平台(自己一手搭建),使用爬虫n ... -
陆续整理数据方面的资料
2011-05-07 08:58 638差不多有一个多月没写东西了,最近比较忙!还是研究数据一些东西。 ... -
挣钱养家
2011-04-14 22:19 1166如果各位有私活的话忙不过来,可以通过QQ(282215036) ... -
使用perl连接mysql数据库
2011-04-05 22:21 1443用Perl DBI连接MySQL数据库 Perl中一个最酷的 ... -
图像数字识别技术
2011-04-01 17:32 5945最近在研究图像数字识别技术,对于一些简单没有干扰的图片,可以读 ... -
100个可供选择的搜索引擎
2011-03-02 13:11 1525本文根据 readwriteweb ... -
对于处理问题的一点想法
2011-02-23 08:26 1125昨天快下班的时候,遇到一个建立索引的问题,因为快下班了,我没有 ... -
温故而知新
2011-02-20 16:44 1197又回过头来复习以前的知识了?在家里实在无聊!把之前学习过的东西 ... -
加钱也得买票回家过年
2011-01-25 08:44 988昨天从黄牛党手上拿了一张高价票。加了100.哎!这年头在外面忙 ... -
Eclipse3.6 Helios SVN插件–Subversive
2011-01-12 11:42 3658刚在Google Code上发布了一个Open Project ... -
博客有时候来不及更新,希望大家见谅!
2011-01-10 17:42 1017刚到新公司,可能开始忙了,博客有时候来不及更新,希望大家见谅! ... -
新公司入职第一天
2011-01-10 11:47 1336今天是我去新公司入职的第一天。感觉一切都是新的,从头开始!加油 ... -
java中各种算法的实现
2010-12-30 13:01 1167选择排序算法的JAVA实现 viewplainprin ... -
java基础知识复习
2010-12-30 13:00 1025学习Java一 配置环境变量 学习Java二 开发第一 ... -
开发人员应该记住的10句谚语
2010-12-13 23:32 1089所谓谚语,就是 ...
相关推荐
首先,我们来谈谈JavaScript爬虫。JS爬虫是利用JavaScript语言编写的一种网络爬虫,主要用于抓取网页上的动态内容。JavaScript因其广泛应用于前端开发,许多网站的交互和数据加载都依赖于它。在本项目中,JS爬虫可能...
首先,让我们谈谈Python爬虫。Python是网络爬虫领域最常用的语言之一,因为它具有丰富的库支持,如BeautifulSoup和Scrapy。BeautifulSoup库用于解析HTML和XML文档,能够方便地提取我们需要的信息。Scrapy则是一个...
爬虫设计时还需要考虑反爬策略,如设置合适的请求间隔,处理cookies和session,以及可能需要的IP代理池。 接下来,是**数据分析**部分。爬取到的数据通常需要进行清洗、整合和分析,以便得出有用的信息。Python的...
接着,我们来谈谈爬虫。爬虫是一种自动化程序,它按照一定的规则遍历互联网,收集和存储网页信息。在这个项目中,爬虫被用来抓取每个域名对应的网页内容,包括标题、关键字和描述。标题通常是网页的主题概述,关键字...
在深入了解WebMagic之前,我们先来谈谈爬虫的基本概念。爬虫,也称为网络爬虫或网页蜘蛛,是一种自动抓取互联网信息的程序。它们通过模拟用户浏览行为,遍历网站,抓取网页内容,并存储在本地或者数据库中,常用于...
请谈谈如何避免被网站封禁或拉入反爬虫机制。 - **设置频率**:通过设置合理的延迟时间(如使用Scrapy的`DOWNLOAD_DELAY`配置项)来降低对服务器的压力。 - **设置深度**:限制爬虫递归爬取的层级,避免无限制地...
接下来,我们谈谈爬虫程序。爬虫是一种自动化程序,它遍历互联网上的网页,提取所需信息,如电影标题、演员、剧情简介等。在这个案例中,77Y8电影爬虫程序可能使用HTTP请求来获取网页内容,然后通过解析HTML或XML来...
首先,我们来谈谈Python爬虫的基础。Python是网络爬虫的常用语言,因其语法简洁且拥有丰富的库支持而受到欢迎。在本教程中,你将学习如何使用requests库发送HTTP请求,获取网页HTML内容;接着,BeautifulSoup库会教...
例如,面对反爬虫的技术挑战时,管理者应以信息保护、服务稳定和数据准确性为目标,分析面临的流量、环境复杂性及风险等实际问题,制定出针对性的策略,并将其细化为可执行的任务,分配给团队成员。在执行过程中,...
总结来说,这个压缩包内容涵盖了软件开发初期的重要步骤,包括需求分析、技术选型、网络爬虫的实现以及数据模型的设计。这些都是IT专业人员必备的技能,尤其是在数据分析、Web开发等领域。通过学习和实践这些内容,...
例如,网页爬虫可能需要用到队列进行广度优先遍历,数据库管理系统利用索引(一种特殊的数据结构)提升查询速度,而搜索引擎则可能运用图的最短路径算法来计算网页之间的关联性。此外,数据结构和算法也是面试和评估...
虽然Python不是游戏开发的首选语言,但它可以用于游戏逻辑、原型设计和测试。例如,Pygame是一个Python模块,可用于创建2D游戏。如果这个示例包含游戏消费的数据,那么Python可能被用来分析玩家的消费行为和购买模式...
此外,由于使用了WebQQ协议,还需要关注腾讯的反爬虫策略,避免因频繁请求而被封禁。 总的来说,MingQQ v1.0高仿版的开发涉及到了WebQQ协议的解析、客户端应用程序的设计与实现、用户界面的构建、性能优化以及安全...
首先,让我们谈谈Python的语法特点。Python的一个显著特征是代码缩进。不同于其他语言如C、Java或PHP使用花括号{}来定义代码块,Python依赖于代码的缩进来组织逻辑结构。这要求开发者在编写代码时保持一致的缩进风格...
"网络爬虫"在这里可能不太直接相关,但如果游戏需要获取在线数据,比如排行榜或天气信息,Python的网络爬虫技术就派上用场了。例如,通过requests和BeautifulSoup库获取并解析网页数据,然后将其集成到游戏中。 ...
首先,我们来谈谈“下载”技术。下载是互联网中的一项基础操作,它涉及TCP/IP协议、HTTP或FTP等网络协议。《E时代搜索小偷》可能采用了多线程下载或者断点续传技术,提高下载速度和效率。多线程下载是指同时从服务器...
这个项目充分利用了网络爬虫技术和CSS样式设计,为求职者提供了一种便捷的方式,将他们在LinkedIn上的个人信息转化成专业且具有吸引力的简历文档。 首先,我们来了解一下网络爬虫技术。网络爬虫是一种自动遍历网络...
接下来,我们谈谈Scrapy和Twisted的关系。Scrapy是一个用Python编写的爬虫框架,其底层依赖于Twisted来实现高效的网络请求。Scrapy的每个请求都是异步的,这得益于Twisted提供的非阻塞I/O机制。在Scrapy中,你可以...
在"ItemDemo.rar"这个压缩包中,我们可以找到一个基于Scrapy的实例,它是专门为初学者设计的,用于演示如何使用Item对象进行数据抓取。"Item"在Scrapy中扮演着数据模型的角色,它定义了我们想要从网页中抽取的数据...
在大数据和信息处理领域,这样的工具具有广泛的应用前景,例如爬虫项目、数据分析、内容挖掘等。 接下来,我们来谈谈与`标签`相关的知识点。"zookeeper"是一个分布式协调服务,由Apache开发,用于管理分布式应用中...