这是我自己做的一个爬虫,是基于词频密度过滤、利用百度、谷歌、搜搜、360搜索4个引擎为种子来源的多线程爬虫,结果存入mysql。用到了jsoup和webclient。
github:https://github.com/wo4li2wang/MSpider
写这个纯是个人兴趣做的,因为我参加过数学建模,我一直想把数学模型用到程序里,所以尝试着写了这个东东,但好多功能没办法实现。希望大家能提供一些指导或改进的想法。
- 原理****
1. 过滤算法
过滤关联度不大的网址,避免爬虫盲目搜索。目前只用到词频密度对网址和域名进行打分,在任务堆积较多(超过总队列长度90%)时,过滤掉相对评价分数小的网址。打算下一步得到关键词在全文的分布向量,用熵权系数法来比较各个关键词的分布情况,进一步优化过滤算法。原理和把纸撕成碎片然后对边缘进行拼合求关联度一样,关键词分布就像纸片的边缘,可以当做特征向量来求两两之间的商权系数,判断各关键词之间存在什么关系。(不过目前用词频密度过滤结果还算不错,大家可以试试看)
2. 整体结构
分为引擎搜索线程、爬虫线程和垃圾回收线程、数据库模块和任务队列4部分。这里自己画了个大致的结构图,如下:
引擎搜索线程采用单例模式,可以利用上述4中搜索引擎输入关键字得到结果,并将结果以一种特殊的数据结构放入任务队列中。引擎搜索线程用于获得爬虫种子,它受垃圾回收线程的控制。在队列任务不多的情况下利用site:host语句在各个引擎中搜索模型中host评分最高的网址,获得关联度更强的种子供爬虫使用。
爬虫线程的数量是可修改的(下一步打算结合内存和算法让其数量动态变化)。它们不断向任务队列里申请任务,得到分配后爬取网页,调用过滤算法,将有价值的结果放入队列并调用数据库模块写入数据库。
垃圾回收线程是后台线程,单例模式,时刻监控任务队列的情况,并在任务较多时清理垃圾,任务较少时启动引擎搜索线程获得更多爬虫种子。平时则关闭引擎搜索线程。
数据库模块采用单例模式,我没有用ThreadLocal(因为我的小电脑顶多运行8只爬虫,读写操作没那么频繁)。用同步块来执行读写操作。接受引擎搜索线程和爬虫线程的读写请求。它以host作为分类准则,对连接进行分类处理。不同的host存入不同的表内。
任务队列其实不是队列,它是对TreeSet的改造,还是采用单例模式╮(╯▽╰)╭,存放特殊数据结构的任务,供爬虫们使用。同时它也负责爬虫请求的任务分配。
3. 执行过程
1)调用引擎搜索线程run方法(注意不是start启动)初始化,从4个引擎上得到一定数量的种子
2)分别启动垃圾回收线程和所有爬虫线程,后续线程控制完全归垃圾回收线程控制。当然可以通过暂停按钮让所有线程阻塞。
- 使用方法
启动mysql,输入create database mspider;
启动 com.td1madao.gui.MyFrame 即可启动GUI程序,也可以用 com.td1madao.gui.NoGui命令行启动
gui效果如图
在数据库里的效果如图(这里用MYSQL FRONT显示)
如果觉得功能不够,可以在com.td1madao.global.GlobalVar下修改默认配置,配置里提供了host黑名单、线程数量、算法等级、请求次数、任务队列长度等等,因为我不是很会做GUI,所以就没有在图形界面里实现这些功能。
- 使用技巧
如果想加入一些限制,可以采用如下语法
关键词(权重,是否必须存在)
权重是一个正实数,默认为1,表示这个关键词的重要程度
是否必须存在是一个布尔值,只能为true或false,表示这个关键词是否必须有,如果选true,不含这个关键词的连接会被过滤掉
比如:
JAVA 本科生 暑假 实习(4,true) 2014
那么实习这个词必须出现,且其词频密度权重为其他关键词的4倍(默认为1)。这样优先得到与实习关联强的连接
如果用括号限制,两个值必须都写,不能只写一个,关键词和括号之间不能存在空格!
[将要实现的功能] 如果有时间,打算增加同义词功能,比如:
奇虎/360/安全卫士(1,true) JAVA 后台
这样可以把 奇虎、360、安全卫士多个词当做同义词进行算法分析,搜索时类似搜索引擎的'OR'语法,但在算法实现上有点困难,有时间我会补充上。因为涉及到编译原理词法分析和语法分析的知识,稍微有点难做。
这只大爬虫的完全是出自个人的兴趣,程序结构、模型设计,算法设计和代码实现均个人完成,有的地方代码还不是很规范,很多设计模式也没有灵活运用上,希望大家不要笑话我o(╯□╰)o
ps:偷摸写点多余的东东。我是大三本科生,想在这个暑假去公司实习,希望哪位学长或学姐愿意给我一些建议或者觉得我应该向哪些求职公司准备。我的学习方向纯是JAVA 和JAVA WEB,感觉好多公司用得都是PHP或者C++,搞JAVA的公司实习真的好难找……
希望能对我毕业规划提供一些学习指导(当然如果真有人愿意给我推荐是最求之不得的咯),因为我家里没有搞IT的,比如将来就业该准备什么、怎么规划、应该学哪些热门技术、包括就业趋势,我只能问家里有搞IT的朋友或者自己瞎摸索T_T,考虑到毕业后要就业感觉各种没经验啊。
我的邮箱:wo4li2wang@163.com
我的qq:360810498
欢迎大家给我提一些建议或者经验
相关推荐
在IT领域,爬虫搜索和搜索引擎是至关重要的技术,它们为获取、整理和提供网络上的海量信息提供了有效手段。本文将深入探讨这些概念,并通过一个简单的Java爬虫程序实例进行说明。 首先,让我们理解什么是爬虫。爬虫...
网络爬虫和搜索引擎是互联网数据挖掘与信息处理的两个重要技术。它们在现代信息技术中扮演着不可或缺的角色,尤其是在大数据分析、市场研究、竞争对手分析、内容推荐系统等方面。 网络爬虫,也称为网络蜘蛛或Web...
爬虫搜索算法是一种模拟自然界中昆虫爬行行为的优化算法,用于解决单目标优化问题。在计算机科学领域,尤其是在优化技术中,这类算法被广泛应用于寻找复杂问题的全局最优解。RSA,全称Randomized Search Algorithm...
搜索引擎爬虫是网络数据抓取的关键工具,它们自动地遍历互联网上的网页,收集信息,以便于搜索引擎构建索引,从而提高搜索效率和准确性。在这个特定的案例中,"搜索引擎爬虫(支持自定目录)" 提供了定制化的目标...
网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具网站图片爬虫小工具...
【Python分布式爬虫搜索引擎源码】是一个基于Python 3.5开发的项目,它展示了如何构建一个能够抓取网络上不同类型信息的系统,包括文章、问答以及招聘信息。这个项目的核心目标是利用Python的网络爬虫技术来高效地...
计算机-爬虫-基于布谷鸟搜索算法的主题爬虫搜索策略研究 计算机领域中,爬虫技术是搜索引擎的核心组件之一,主题爬虫作为一种特殊的爬虫,旨在为用户提供个性化的搜索服务。随着网络信息的爆炸式增长,传统的搜索...
搜索工具 爬虫搜索,简单的搜索引擎,java
本文档主要讨论了基于Java的网络爬虫搜索引擎的设计和实现。以下是从该文档中提炼出的相关知识点: 一、搜索引擎概述 * 搜索引擎是指通过网络爬虫或蜘蛛来收集、处理和存储网络数据,以便用户快速地检索和获取所需...
需要加载一个字典文件,此字典文件在爬虫程序中要求放在此目录结构下: c:\dictionary\dictionary.txt,词典默认认为是按照词语长到短的顺序排列的 ...4、此爬虫程序采用的是广度优先的搜索方法搜索网络中的网页
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放...
国内外主流搜索引擎爬虫 EngineCrawler 主要用于抓取国内外一些主流搜索引擎搜索返回的url内容,目前支持以下的搜索引擎: baidu,google,yahoo,ecosia,teoma,360,hotbot,脚本支持直接使用百度或者谷歌的高级...
爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...
一个小脚本而已,主要爬取主站首页url geturl('XX XX 首页', page=$page) // 这里填写关键字,支持多个关键字搜索...爬虫结果自动导出为result.txt 格式:[url] [title] eg. http://www.baidu.com 百度一下,你就知道
爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...
#### 四、提高网络爬虫搜索效率的方法 为了提高网络爬虫的搜索效率,可以从以下几个方面着手: - **智能化链接选择**: 不仅仅依据链接的数量进行访问,而是通过分析链接的相关性和重要性来决定优先级。 - **网页...
爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...
搜索引擎Web爬虫是互联网信息获取的关键技术之一,它在数据挖掘、内容分析、网站排名等多个领域都有着广泛的应用。Web爬虫,也称为网络蜘蛛或网页抓取器,是一种自动浏览互联网并下载网页的程序。它按照一定的规则...
爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...