讨论:java搜索引擎之网络爬虫研究 思想

uastation 2010-12-20 12:38:52
加精
各位大哥,小弟在这求救了……

首先我说下我自己写的网络爬虫思想:

1.首先,得到一个URL,截取重要字段如:“http://www.163.com” 我截取:“163.com”部分。

2.其次,根据第1个步骤得到的URL,系统分配一个线程给它,然后根据URL去攫取有用的网址,进一步去爬取网络信息。

3.最后,根据攫取的信息,分析内容,截取重要内容保存数据库中。

问题如下:

请问上面的思想有什么问题没有呢?各位大哥,在第2步中,每一个URL都是分配一个线程,然后在一个线程下,又发现新的URL,继续用本线程去爬取,可有会问题?

当线程启动多了,发现如果只是启动一个线程会爬取很多的信息,如果是启动多个线程,发现爬取的信息就少了,请部这个是什么问题呢?

如何解决当前各大网站字符编码的问题?因为当前的各大网站启用的编码不标准,没有通用的,有的使用UTF-8,有的使用GBK2312,等等。如何解决爬行数据乱码问题?

在网站的后台,如何停止正在爬行数据的线程?
下面是图片截图:
...全文
2924 108 打赏 收藏 转发到动态 举报
写回复
用AI写文章
108 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanxiewei 2011-06-09
  • 打赏
  • 举报
回复
这个好好学习
uastation 2011-03-07
  • 打赏
  • 举报
回复
今天对这贴子做一个总结:

大家的回答,都很有创意,也很实用;在这里,我谢谢大家了;

到目前为止,自己觉得自己写代码实现网络爬虫这个想法,是正确的,只是运行的时候在线程这一块会速度慢下来,所以,经过长时间的学习与实践,个人还是比较推荐使用用Nutch搜索引擎的网络爬虫,网页解析可使用htmlparser工具;如果有兴趣的兄弟,可以上网学习下,试试自己动手写搜索引擎是多么酷的一件事情;谢谢~
安卓机器人 2011-02-12
  • 打赏
  • 举报
回复
mark下,感觉有点看不懂额
涅槃 2011-01-18
  • 打赏
  • 举报
回复
靠,这个就是爬虫啊,抓取别的网站内容
wensefu 2011-01-10
  • 打赏
  • 举报
回复
一直想找时间做个这方面的东西出来,不过工作太忙,唉
0轰隆隆0 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 96 楼 hpjianhua 的回复:]

再向大家请教一个问题:

关闭正在爬行的线程如何做到呢?当有批量线程在运行的时候……
[/Quote]

对于这个问题,你需要掌握以下知识:

1,多线程的处理
2,线程间通讯的问题
3,线程的同步和异步处理
4,线程池的处理(可选)

掌握了以上几点知识点,你的这个问题就迎面而解了~

silence1214 2011-01-10
  • 打赏
  • 举报
回复
不要这么搞兄弟,你的思路不错,线程也可以这么用,但是用起来会有问题的,因为你多一个url就开一个线程最终机器会死掉的,你好好理下思路,就是个生产者和消费者问题,一个是发现url的生产者一个是读取url内容的消费者,具体怎么协助,自己看着办吧。我目前也在搞这些 呵呵,思路理清楚就好了,字符编码的实现有办法的。。都是小case
hushengwei1986 2010-12-29
  • 打赏
  • 举报
回复
对于你这样无限制的开线程,我不太赞同,你的cpu扛不住的,用一个监控线程去管理,控制开启线程的数量。
对于字符编码问题,你可以通过的到返回html,从头部拿到起字符编码,当然不是所有的都可以拿到。
想做爬虫,你可以看看httpclient,这个很好用的
leepeter2008 2010-12-29
  • 打赏
  • 举报
回复
太高深了,学习啦
uastation 2010-12-27
  • 打赏
  • 举报
回复
再向大家请教一个问题:

关闭正在爬行的线程如何做到呢?当有批量线程在运行的时候……
telnetor 2010-12-25
  • 打赏
  • 举报
回复

这个在网页中没有显式的给出编码信息时候可以试一试。

[Quote=引用 89 楼 telnetor 的回复:]

另外,检测编码可以用一个工具:icu4j。这里有使用方法:http://blog.csdn.net/telnetor/archive/2010/02/06/5555349.aspx
[/Quote]
telnetor 2010-12-25
  • 打赏
  • 举报
回复
另外,检测编码可以用一个工具:icu4j。这里有使用方法:http://blog.csdn.net/telnetor/archive/2010/02/06/5555349.aspx
buzhidaoyayaya 2010-12-25
  • 打赏
  • 举报
回复
nulixuexi
yodlove 2010-12-25
  • 打赏
  • 举报
回复
网页的深度需要考虑,而且爬过的链接需记录,要不会进入一个死循环,
编码问题可以分析<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
这个可以用htmlparser来解决
ishuca 2010-12-25
  • 打赏
  • 举报
回复
个人建议,楼主可以尝试尝试分布式。当然具体的任务分配机制是需要事先考虑好的。不然可能效率会更低。线程池也是不错的选择。如果觉得用系统的不好,你可以先了解java本身的线程机制,然后自己手工写一个效率更高的。
lq19880488 2010-12-24
  • 打赏
  • 举报
回复
我觉得楼主为每一个url都开一个线程有点浪费。你可以先开好60个线程作为slave,用于抓取网页,解析url,然后开设一个线程作为master,用于管理和分配url。这种模式也可以用于分布式的爬虫。
telnetor 2010-12-24
  • 打赏
  • 举报
回复
楼主,爬虫采集数据的时候应该分深度优先、广度优先。
还有对于一个站点,采集的深度也是一个值得考虑的因子。它关系到采集量。深度太大,数据量过多,对广度有影响(相同时间内覆盖的站点数)。深度太小,站点的数据可能采集不全。好像有研究说一半是5层还是7层。


有本入门书:《走进搜索引擎》可以看一下。
xuehan_1010 2010-12-24
  • 打赏
  • 举报
回复
将所有URL放在队列中?需要考虑内存够不够的问题。需要视情况进行内外存数据的互换。
编码问题可以用cpdetector。。(名字差不多吧)这个包,但用了它效率肯定不好。建议自己分析,没必要每个网页都分析正确无误,大部分正确就可以了。
用不用线程池无关紧要。开固定数目的线程死循环抓取,不比线程池效率差,还可以省掉管理线程池的开销。
注意线程间的数据同步。
设计一个URL过滤器,可以实现许多实用的功能。
BerkeyDB数据库不错.但如果你要抓取的URL在亿级以上的话,还是有效率问题。
html-parser这东东就不必用了。非要用的话,可以自己把里面的关键部分拿出来,自己写个处理类。
可以考虑异步IO的方式去获取数据,(JAVA-NIO),可能会有一点效率的提升,但需要你学会用。(新的HttpClient里面似乎有这功能)。

结束爬行?结束线程就可以了 。怎么结束线程就不是爬虫的问题,是java的问题了。
请注意使用volatile关键字。
平庸老鱼 2010-12-24
  • 打赏
  • 举报
回复
建议你看这本书,当年我就是看的这本书,网络机器人Java编程指南,虽然本身书写得不是太好,但刚好很符合这个题目。
wsyangdayong 2010-12-24
  • 打赏
  • 举报
回复
我也刚开始研究这东东,有一本书《自己动手写网络爬虫》还行,我还在看。
加载更多回复(47)
简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它: 实现了面向内容讨论的论坛 包含了面向用户分享、交友、游戏的社交网络 集成了聚合独立博客的能力,共建共享优质资源 并且 100% 开源 欢迎到 Sym 官方讨论区了解更多。另外,如果你需要搭建一个企业内网论坛,请使用 SymX。 动机 Sym 的诞生是有如下几点原因: (正版) 很多系统界面上仍然保持着老式风格,远远没有跟上时代发展的脚步,它们没有创新、好玩的特性,缺少现代化的交互元素和用户体验 大部分系统是从程序员的角度进行设计的,没有考虑实际的产品、运营需求,这类系统功能过于简陋、细节不够精致、缺乏长期维护 另外,我们正在探索新的社区模式,实现独奏(Solo)与协奏(Symphony)相结合的社区新体验 (野版) 万能的 GitHub 上连个能用的 Java 社区系统都找不到,Sym 填补了这个宇宙级空白 做最 NB 的开源社区系统,预计几年以后 82% 的社区都将是 Sym 搭建的 作者技痒,炫技之作,Ruby/Python/Node.js/(特别是)PHP 怎么能比得过 Java 案例 个人维护: 黑客派 宽客网 贵州IT 超级产品经理 Titandb 学习主站 呆萌狮 - Demo's 公司维护: 四方环视 如果你也搭建好了,欢迎通过 Pull Request 将你的站点加到这个列表中 :-p 功能特性 具体功能点细节可浏览 Sym 功能点脑图,下面列出了 Sym 的主要特性,说明 现代化 的由来。 好用的编辑器 Markdown:支持 GFM 语法以及一些扩展语法 格式调整:粗体、斜体、超链接、引用、列表等可以通过工具栏按钮,同时也支持快捷键 文件上传:支持复制粘贴或者拖拽上传图片;支持上传普通文件;对 MP3 会使用在线播放器进行渲染 剪贴板处理:自动将复制的内容转换为 Markdown 格式;外链的图片自动上传站内 @用户:根据用户名自动补全,支持快捷键 Emoji:支持大部分主流 Emoji 表情,快捷键自动补全 数学公式:支持 LaTex 数学公式渲染 数据暂存:支持本地浏览器暂存数据,避免意外情况导致编辑内容丢失 智能、灵活的信息架构 传统的节点式社区要求帖子必须 分类 到某一个节点下,信息架构方式属于自上而下。Sym 不是自上而下的节点式信息架构,帖子不需要固定分类,通过标签 聚合 到某个领域下。 标签:根据帖子内容智能抽取关键字进行标签自动补全,一篇帖子关联多个标签。标签和标签之间以带边权重的图结构进行描述,方便进行相关计算 领域:一个领域下包含了多个标签,通过标签将帖子自动聚合到具体领域,随时可以通过增减关联标签从而达到调整领域范围,最终聚合出适合的帖子列表 满足多样化的发帖需求 目前支持 4 中帖子类型,满足不同用户的偏好: 普通帖子:提问或分享对别人有帮助的经验与见解 思绪:写作过程的记录与重放,文字版的沙画表演 (?) 小黑屋:邀请好友在私密空间中进行交流 同城广播:发起你所在城市的招聘、Meetup 等 另外,所有帖子都可以设置 打赏区 ,打赏区可以放置一些“珍藏”内容,只有打赏后的用户才能浏览。打赏区编辑器同样支持 Markdown、Emoji 和文件上传等特性。打赏区支持内容更新,并可以随时调整打赏积分值。 对于测试帖,可以使用 Sandbox 机制:带有 Sandbox 标签的帖子将视为测试帖,不会显示在首页或是某领域内,只会展现在发帖者自己的帖子列表中。 人性化的回帖交互 实时呈现:回帖提交后其他浏览者可以不刷新页面就实时看到你的回帖 随时滚动:浮出式回帖编辑器方便回帖者随时滚动屏幕查看其他内容,不必担心焦点丢失 真正的回复:回复是针对回帖而言的,而 @ 是针对用户而言的,@ 是提及不是回复,很多系统都没有考虑到这一点。回复/引用可以在当前位置进行展开浏览,也可以跳转到回帖处,并支持跨分页跳转 智能机器人:回帖时可以让机器人也参与到讨论中来,活跃气氛的同时说不定机器人真的能解决一些问题呢 用户个性化设置 用户可以自己设置很多参数以满足个性化需求: 帖子列表浏览分页每页条目数 回帖浏览模式:传统(按发布时间升序,无实时推送刷新);实时(按发布时间降序,实时推送新回帖) 头像浏览模式:原图(支持 gif 动图);静态图 Chrome 通知/邮件订阅/键盘快捷键开关 设置常用 Emoji,方便发布内容时快速插入表情 除了功能个性化配置项,还有很多隐私项开关: 是否公开帖子/回帖列表 是否公开

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧