网络爬虫十三-队列处理
所有的URL都接受管理,并在此进行流动。URL从管理模块的存储空间开始,一直到最后输出给磁盘上的URL索引,都由此部分调度。
首先,给出URL调度的一般过程,如图所示。
其流程的各个具体操作,后面详述。
要实现前面DNS的无重复有效请求,那么在这个部分里设置一个Nsite类,实现这样的功能:当一个站点请求过DNS后,就把返回的IP保存到这个类里,那么再有这个站点内的URL出现(域名部分相同),就可以使用这个IP,而不必重复请求。
为了从一个URL中很快的找到其对应的Nsite还应该设置一个hash表,
里面存放着所有Nsite站点,这样,一个URL可以通过采用计算其域名的哈希值就快速的找到对应的站点Nsite。如:
NamedSite *namedSiteList;
namedSiteList = new NamedSite[内存中的站点数];
如果这个站点没有请求过DNS,那么就加到一个循环队列dnssite中,随时等待main( )中对其提出调度。如果有就转移到IPSite中,如果这个IPSite已经加到了okSite,那么,就把URL打到tab中。随时等待main( )调度抓取。
void push_surlqueue(Surl *url)
{ if (url != NULL && surl_precheck(url)) { SPIDER_LOG(SPIDER_LEVEL_DEBUG, "I want this url: %s", url->url); pthread_mutex_lock(&sq_lock); surl_queue.push(url); if (surl_queue.size() == 1) pthread_cond_signal(&sq_cond); pthread_mutex_unlock(&sq_lock); }
} Url * pop_ourlqueue()
{ Url *url = NULL; pthread_mutex_lock(&oq_lock); if (!ourl_queue.empty()) { url = ourl_queue.front(); ourl_queue.pop(); pthread_mutex_unlock(&oq_lock); return url; } else { int trynum = 3; struct timespec timeout; while (trynum-- && ourl_queue.empty()) { get_timespec(&timeout, 500); /* 0.5s timeout*/ pthread_cond_timedwait(&oq_cond, &oq_lock, &timeout); } if (!ourl_queue.empty()) { url = ourl_queue.front(); ourl_queue.pop(); } pthread_mutex_unlock(&oq_lock); return url; }
}
网络爬虫十三-队列处理相关推荐
- Python3网络爬虫(十三):王者荣耀那些事!(Fiddler之手机APP爬取)
转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 实 ...
- python爬虫手机app数据库_Python3网络爬虫(十三):王者荣耀那些事!(Fiddler之手机APP爬取)...
运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言 暑假回家,"小皇帝"般的生活持续了几天,头几天还挺舒服,闲久了顿 ...
- (十三)python网络爬虫(理论+实战)——IP代理、构建IP代理池
系列文章: python网络爬虫专栏 目录 序言 本节学习目标 特别申明 5 ip代理
- python网络爬虫初识_python爬虫(一)初识爬虫
什么是爬虫? 中文名(网络爬虫) 外文名(web crawler) 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程 ...
- java爬虫面试题_使用Java实现网络爬虫
网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 另外一些不常使用的名字还有蚂蚁.自动索引.模 ...
- java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识
原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...
- 浅谈网络爬虫中广度优先算法和代码实现
前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章--浅谈网络爬虫中深度优先算法和简单代码实现.今天小编给大家分享网络爬虫中广度优先算法的介绍及其代码 ...
- 使用Scrapy构建一个网络爬虫
记得n年前项目需要一个灵活的爬虫工具,就组织了一个小团队用Java实现了一个爬虫框架,可以根据目标网站的结构.地址和需要的内容,做简单的配置开发,即可实现特定网站的爬虫功能.因为要考虑到各种特殊情形, ...
- 精通python网络爬虫-精通python网络爬虫
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多, ...
最新文章
- delphi listview 获取行高_《我的侠客》布料怎么获得 布料获取方法
- Android自带语音播报+讯飞语音播报封装(直接用)
- eclipse中导入spring-boot框架的jar包方法
- 【Python基础】Python轻量级循环-列表推导式
- 64位ubuntu 12.04下如何解决中文乱码的问题
- mysqli与pdo防sql注入源码
- 从淘宝来看后端架构发展
- 数学思想 —— 简化问题
- mysql开发是做什么_数据库开发是做什么东西的
- python函数长度单位换算_长度单位换算表-在线长度单位转换器
- Linux基础篇(五):远程操作
- 一只100万年也不死的猫
- <<算法很美>>——(七)——DFS典题(一):水洼数目
- 2017大数据与分析创新峰会9月6-7日在上海宝华万豪酒店拉开帷幕
- 图解 | 原来这就是网络
- ACM模板 | 学习笔记 数学相关
- 最长黑白相间连续串(有规律)
- 导线截面积和电流的关系
- 机器翻译相关论文Topic推荐
- 生成HTTP响应报文