多线程爬虫的设计问题

问题描述

大家好,最近要写个基于爬虫的小工具,主要是爬行单个网站并解析数据保存其中需要的内容。我的想法是这样的,爬行线程从unsearchedUrl队列中取出url,去请求该url将获取的页面响应及其url存入到unparsedResponse队列中,解析线程从unparsedResponse队列中取出一条响应,分析该响应中包含的超链接,过滤掉重复的链接后存入unsearchedUrl队列中,当然,解析线程还要进行其他内容的提取。我这样做主要是为了提高性能,对每个url只进行一次网络访问。现在主要的问题是单个的线程实现了,可是爬行线程和解析线程同时多个进行不知该怎么弄,麻烦大家给分析分析,谢谢!下面是参考流程图。 问题补充:要是用ExecutorService线程池来做的话,那任务里应该是怎么写呢,我想把爬行和解析响应分开onlylau 写道

解决方案

你可以试下用线程池,取得的url可以放到队列中看看java.util.concurrent包下的相关类如线程池类:java.util.concurrent.ThreadPoolExecutor
解决方案二:
其实,我不是很看得懂楼主的意思,就随便谈谈,看看对楼主有没有什么启发:1.楼主可以弄一个监听线程,只要爬虫队列里有url,就生成一个线程,并且线程活动数加1线程完成的话,就要活动数减一。同理,对应解析线程。2.只要队列,跟活动数为0就是程序结束的标志。3.使用一定的同步机制,防止出错。

时间: 2025-01-20 13:13:59

多线程爬虫的设计问题的相关文章

垂直型爬虫架构设计(1)

从事爬虫方向开发马上也将近两年时间了,今天基友问我关于爬虫的架构设计问题.其实这么久也想总结一下自己的整个开发的过程,架构的设计问题..对自己进行一些总结..仅作参考. 1.爬虫的分类 : 对于我来说,爬虫分为两类: 需要载入配置文件的爬虫与不需要载入配置文件的爬虫. 其实也就是人们常说的垂直型爬虫跟宽度(深度)遍历爬虫. 2.爬虫的架构: 1.宽度遍历爬虫. 做过SEO的朋友大概都知道,如果一个网站需要百度能够尽快的抓取,那么仅仅优化关键词,提高权重等都是比较简单的优化,爬虫友好性需要网站在建

使用Python多线程爬虫爬取电影天堂资源_python

最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. 先来简单介绍一下,网络爬虫的基本实现原理吧.一个爬虫首先要给它一个起点,所以需要精心选取一些URL作为起点,然后我们的爬虫从这些起点出发,抓取并解析所抓取到的页面,将所需要的信息提取出来,同时获得的新的URL插入到队列中作为下一次爬取的起点.这样不断地循环,一直到获得你想得到的所有的信息爬虫的任务

php与python实现的线程池多线程爬虫功能示例_php技巧

本文实例讲述了php与python实现的线程池多线程爬虫功能.分享给大家供大家参考,具体如下: 多线程爬虫可以用于抓取内容了这个可以提升性能了,这里我们来看php与python 线程池多线程爬虫的例子,代码如下: php例子 <?php class Connect extends Worker //worker模式 { public function __construct() { } public function getConnection() { if (!self::$ch) { sel

Python 爬虫学习笔记之多线程爬虫_python

XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我个人认为学习一下正则表达式是大有益处的,之所以换成 XPath ,我个人认为是因为它定位更准确,使用更加便捷.可能有的人对 XPath 和正则表达式的区别不太清楚,举个例子来说吧,用正则表达式提取我们的内容,就好比说一个人想去天安门,地址的描述是左边有一个圆形建筑,右边是一个方形建筑,你去找吧,而使

php与python 线程池多线程爬虫的例子

php例子 <?php   class Connect extends Worker  //worker模式 {   public function __construct() {   }   public function getConnection() { if (!self::$ch) { self::$ch = curl_init(); curl_setopt(self::$ch, CURLOPT_TIMEOUT, 2); curl_setopt(self::$ch, CURLOPT_R

多线程爬虫 CPU 占用 100%的问题

问题描述 之前的解析用的是正则表达式,没什么问题,三十个线程稳稳的,后来改成了XPath的方式取页面内容,CPU没一会就占用到了百分之百 解决方案 解决方案二:这是线程监控解决方案三:线程状态是等待的,应该不是这个线程的问题是不是有些线程中出异常了,如果对方的网页html并没遵循xml规范(标记或者<>不完整),有试过没解决方案四:是查下你是设置了几个线程同时运行的?解决方案五:引用2楼dongxinxi的回复: 线程状态是等待的,应该不是这个线程的问题是不是有些线程中出异常了,如果对方的网页

[申精]淘宝网爬虫引擎设计架构图等

问题描述 我曾经是一名JAVAWEB程序员,2009年12月辞去工作后,来到北京找工作,我现在在一家金融公司做网管,白天工作很是郁闷(网管的郁闷想必大家都知道吧,领导不重视技术,看待搞技术的和看待民工类似),只有晚上下班后,才是我的自由程序员时间,沉浸在我编程得到快感之中.我现在利用我所有的闲余时间,所有的周末.制作了淘宝网决策搜索引擎啊.但随着项目的制作进展,我发现<淘宝网>自身由于掌握自己数据库,做的会比我更好,目前我计划将项目做成一个网罗各大购物网站的专业搜索引擎,提供各种商品和商家的情

多线程爬虫批量下载pcgame图片url 保存为xml的实现代码_python

复制代码 代码如下: #coding=gbkfrom xml.dom import minidom,Nodeimport urllib2,re,osdef readsrc(src):    try:        url = urllib2.urlopen(src)        content = url.read()#.decode('utf-8')        return content    except:        print 'error'        return Non

如何使用.Net来设计一个爬虫系统

创业以来尝试过好几个创业项目,在每次 bootstrap的时候,往往都需要借助于一些Internet上的内容,这里不可避免的就需要写一些简单的爬虫来抓取一些数据来完成项目的初期引导.这些小的爬虫对于我学习.Net,Http Protocol, Framework Design, Design Patterns提供了很多的帮助.爬虫版本的一次一次refactoring和upgrade都往往能够加深我对于某些领域的知识的掌握. Open source方面比较有名的爬虫项目有Nutch和Heritri