有做爬虫经验的朋友,请教爬虫抓取url时的队列处理问题

问题描述

最近我在做一个爬虫毕业设计,爬虫分为2个队列,对应两张数据表seeds和targets,seeds是尽可能多的爬url,targets是分析seeds中的url是否为我所要的,是则插入,否则过掉。而我现在的问题是,由于网页上的url可以看成是多叉树(因为每个链接进去后,又会爬到更多的链接……),所以seeds队列的记录以指数级增长,而targets却几乎是线性增长的,很明显跟不上seeds速度,所以现在出现一种情况是程序执行10多秒后,seeds表中爬到了8000多个url,但targets表才100来个记录。。这样的话seeds显得过于臃肿,而targets却比较空闲。请教各位朋友是如何解决这两者的矛盾呢? 问题补充:关于过滤问题,我是这样想的:我现在要爬新浪博客下的文章(对应的url我称为target),即需要在磁盘上保存满足正则表达式http://blog.sina.com.cn/s/blog_[0-9a-z]{16}.html(\?tj=1)*的url所对应的页面。经过分析,这些target一般会包含在某些页面中,这些页面我称为seed,它的url满足正则表达式:(http://blog.sina.com.cn/s/blog_[0-9a-z]{16}.html(\?tj=1)*)|(http://blog.sina.com.cn/[0-9a-z]+),即seed为形如http://blog.sina.com.cn/s/blog_xxxxxxxxxxxxxxxx.htmlhttp://blog.sina.com.cn/s/blog_xxxxxxxxxxxxxxxx.html?tj=1http://blog.sina.com.cn/xxxxx的url。因此,我至少要设置两张表,即targets和seeds,targets顾名思义就是存放要保存到磁盘下的url,而seeds就是保存有可能包含target的url。seeds中的每一条记录可能就是一个target,也可能仅仅是找潜在的target的普通url。

解决方案

采用正则表达是来过滤是一个很通用的做法,有的还有模版之类的。但是你现在的是爬新浪微薄的博客对吧,不知道你是通过什么知道http://blog.sina.com.cn/s/blog_xxxxxxxxxxxxxxxx.html 就是你要的target因为blog static id 都是加密过的 blogId, 所以你可以看到就算一个博主下面所有的blog static id 都是没有规律的所以我觉得你可以通过关系来爬,比如从博主,找到博友,在来找文章感觉有点博客搬家的感觉
解决方案二:
你是要自己实现爬虫功能,还是要利用现有的爬虫技术?如果是采用现有的,Java开源Web爬虫技术地址:http://www.open-open.com/68.htm
解决方案三:
3、对url的抓取,设置过滤规则,确认没有必要的就不入库
解决方案四:
1、targets可以使用多线程来处理,这样效率会高很多2、将处理完或不需要的seeds删除、或者移动到历史表
解决方案五:
不知道你的过滤策略是什么?直接过滤http://www.example.com这样的一级域名?还是要http://www.example.com/xxx/xxx对url链接内容进行过滤

时间: 2024-09-17 03:41:06

有做爬虫经验的朋友,请教爬虫抓取url时的队列处理问题的相关文章

《用Python写网络爬虫》——第2章 数据抓取 2.1 分析网页

第2章 数据抓取 在上一章中,我们构建了一个爬虫,可以通过跟踪链接的方式下载我们所需的网页.虽然这个例子很有意思,却不够实用,因为爬虫在下载网页之后又将结果丢弃掉了.现在,我们需要让这个爬虫从每个网页中抽取一些数据,然后实现某些事情,这种做法也被称为抓取(scraping). 首先,我们会介绍一个叫做Firebug Lite的浏览器扩展,用于检查网页内容,如果你有一些网络开发背景的话,可能已经对该扩展十分熟悉了.然后,我们会介绍三种抽取网页数据的方法,分别是正则表达式.Beautiful Sou

重开一贴,非常之急.(在线等) 用C#.net写爬虫抓取网页时为什么出现这种问题?

问题描述 Uriurl=newUri("http://www.baidu.com");WebRequestrequestPage=WebRequest.Create(url);//发送absoluteUri创建请求对象//requestPage.Timeout=1000;WebResponsereponsePage=requestPage.GetResponse();StreamnewsStream=reponsePage.GetResponseStream();//读取页面流Enco

python网络爬虫 - 设定重试次数内反复抓取

import urllib.request def download(url, num_retries=2): print('Downloading:', url) try: html = urllib.request.urlopen(url).read() except urllib.URLError as e: print('Download error:' % e.reason) html = None if num_retries > 0: if hasattr(e, 'code') a

Python实现抓取页面上链接的简单爬虫分享_python

除了C/C++以外,我也接触过不少流行的语言,PHP.java.javascript.python,其中python可以说是操作起来最方便,缺点最少的语言了. 前几天想写爬虫,后来跟朋友商量了一下,决定过几天再一起写.爬虫里重要的一部分是抓取页面中的链接,我在这里简单的实现一下. 首先我们需要用到一个开源的模块,requests.这不是python自带的模块,需要从网上下载.解压与安装: 复制代码 代码如下: $ curl -OL https://github.com/kennethreitz/

《用Python写网络爬虫》——2.2 三种网页抓取方法

2.2 三种网页抓取方法 现在我们已经了解了该网页的结构,下面将要介绍三种抓取其中数据的方法.首先是正则表达式,然后是流行的BeautifulSoup模块,最后是强大的lxml模块. 2.2.1 正则表达式 如果你对正则表达式还不熟悉,或是需要一些提示时,可以查阅https://docs.python.org/2/howto/regex.html 获得完整介绍. 当我们使用正则表达式抓取面积数据时,首先需要尝试匹配 元素中的内容,如下所示. >>> import re >>&

《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

第3章 初识网络爬虫 从本章开始,将正式涉及Python爬虫的开发.本章主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫:另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以便具备编写HTTP网络程序的能力. 3.1 网络爬虫概述 本节正式进入Python爬虫开发的专题,接下来从网络爬虫的概念.用处与价值和结构等三个方面,让大家对网络爬虫有一个基本的了解.3.1.1 网络爬虫及其应用 随着网络的迅速发展,万维网成为大量信息的载体,如

有了 Docker,用 JavaScript 框架开发的 Web 站点也能很好地支持网络爬虫的内容抓取

本文讲的是有了 Docker,用 JavaScript 框架开发的 Web 站点也能很好地支持网络爬虫的内容抓取,[编者的话]Prerender 服务能够为网络爬虫提供预先渲染的动态页面内容,解决了用 JavaScript 框架构建的 Web 站点不支持爬虫抓取的问题.本文详细描述了一种解决方案,尤其是提供了集成 Prerender 服务的 Docker 容器镜像. 如果你正在使用 AngularJS 构建一个面向大众消费者的应用,你肯定希望用户能把它分享到社交媒体上.对于特定的应用而言,丰富的

微信系统做星座分析的朋友介绍下经验

问题描述 微信系统做星座分析的朋友介绍下经验 微信系统做星座分析的朋友介绍下经验:请问在微信中如何实现自动读取qq信息中的星座血型? 解决方案 http://blog.csdn.net/yueqinglkong/article/details/25237351 解决方案二: 在微信公众平台做HTML 5游戏的一些经验

python-为何用Python做爬虫时抓取下来的页面跟源代码不一样?

问题描述 为何用Python做爬虫时抓取下来的页面跟源代码不一样? 代码如下: -*- coding:utf-8 -*- import urllib import urllib2 import re baseURL = 'http://zhidao.baidu.com/question/491268910.html' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, li