python多线程多队列(BeautifulSoup网络爬虫)

程序大概内容如下:

程序中设置两个队列分别为queue负责存放网址,out_queue负责存放网页的源代码。

ThreadUrl线程负责将队列queue中网址的源代码urlopen,存放到out_queue队列中。

DatamineThread线程负责使用BeautifulSoup模块从out_queue网页的源代码中提取出想要的内容并输出。

这只是一个基本的框架,可以根据需求继续扩展。

程序中有很详细的注释,如有有问题跪求指正啊。

import Queue
import threading
import urllib2
import time
from BeautifulSoup import BeautifulSoup

hosts = ["http://yahoo.com","http://taobao.com","http://apple.com",
         "http://ibm.com","http://www.amazon.cn"]

queue = Queue.Queue()#存放网址的队列
out_queue = Queue.Queue()#存放网址页面的队列

class ThreadUrl(threading.Thread):
    def __init__(self,queue,out_queue):
        threading.Thread.__init__(self)
        self.queue = queue
        self.out_queue = out_queue

    def run(self):
        while True:
            host = self.queue.get()
            url = urllib2.urlopen(host)
            chunk = url.read()
            self.out_queue.put(chunk)#将hosts中的页面传给out_queue
            self.queue.task_done()#传入一个相当于完成一个任务

class DatamineThread(threading.Thread):
    def __init__(self,out_queue):
        threading.Thread.__init__(self)
        self.out_queue = out_queue

    def run(self):
        while True:
            chunk = self.out_queue.get()
            soup = BeautifulSoup(chunk)#从源代码中搜索title标签的内容
            print soup.findAll(['title'])
            self.out_queue.task_done()

start = time.time()
def main():
    for i in range(5):
        t = ThreadUrl(queue,out_queue)#线程任务就是将网址的源代码存放到out_queue队列中
        t.setDaemon(True)#设置为守护线程
        t.start()

    #将网址都存放到queue队列中
    for host in hosts:
        queue.put(host)

    for i in range(5):
        dt = DatamineThread(out_queue)#线程任务就是从源代码中解析出<title>标签内的内容
        dt.setDaemon(True)
        dt.start()

    queue.join()#线程依次执行,主线程最后执行
    out_queue.join()

main()
print "Total time :%s"%(time.time()-start)
时间: 2024-11-15 05:58:41

python多线程多队列(BeautifulSoup网络爬虫)的相关文章

Python 多线程同步队列模型

Python 多线程同步队列模型 我面临的问题是有个非常慢的处理逻辑(比如分词.句法),有大量的语料,想用多线程来处理. 这一个过程可以抽象成一个叫"同步队列"的模型. 具体来讲,有一个生产者(Dispatcher)一方面从语料中读入句子,并且存入队列中,一方面看有没有空闲的消费者(Segmentor),如果有,就把句子从队列中弹出并交给这个空闲的消费者处理. 然后消费者把处理完成的结果交给生产者输出,生产者要保证输出与输入顺序一致. 消费者是典型的threading,它需要看见生成者

使用Python写的第一个网络爬虫程序

今天尝试使用python写一个网络爬虫代码,主要是想访问某个网站,从中选取感兴趣的信息,并将信息按照一定的格式保存早Excel中. 此代码中主要使用到了python的以下几个功能,由于对python不熟悉,把代码也粘贴在下面. 1, 使用url打开网站网页 import urllib2 data = urllib2.urlopen(string_full_link).read().decode('utf8') print data 2,使用正则表达式匹配 import re #一般的英文匹配 r

python多线程--优先级队列(Queue)

Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue.这些队列都实现了锁原语,能够在多线程中直接使用.可以使用队列来实现线程间的同步. Queue模块中的常用方法: Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue.fu

利用python多线程和队列管理shell程序

首先来描述下环境,在机器上有很多个JAVA程序,我们在每个JAVA程序里都配置了一个启动|停止|重启的脚本 举个例子: 我们现在要同时运行这些脚本,来达到快速启动所有的JAVA程序,如果我们只用多线程的话,线程是不会返回消息给父进程,我们如何才能知道这些程序是启动成功了呢? 所以我们用到了队列来管理. """我试过gevent,但是会在command这里造成阻塞""" gevent代码如下  如果有朋友知道如何优化,请您告诉我 #!/usr/bi

python 多线程与队列

各位好,之前写了多线程,但是在实际的生产中,往往情况比较复杂,要处理一批任务(比如要处理列表中所有元素),这时候不可能创建很多的线程,线程过多反而不好,还会造成资源开销太大,这时候想到了队列. Queue队列 Queue用于建立和操作队列,常和threading类一起用来建立一个简单的线程队列. Queue.Queue(maxsize) FIFO(先进先出队列) Queue.LifoQueue(maxsize) LIFO(先进后出队列) Queue.PriorityQueue(maxsize)

【Python3爬虫】用Python中的队列来写爬虫

一.写在前面 当你看着你的博客的阅读量慢慢增加的时候,内心不禁有了些小激动,但是不得不吐槽一下--博客园并不会显示你的博客的总阅读量是多少.而这一篇博客就将教你怎么利用队列这种结构来编写爬虫,最终获取你的博客的总阅读量. 二.必备知识 队列是常用数据结构之一,在Python3中要用queue这个模块来实现.queue这个模块实现了三种队列: class queue.Queue(maxsize=0):FIFO队列(first in first out),先进先出,第一个进入队列的元素会第一个从队列

Python网络爬虫实战案例之:7000本电子书下载(2)

一.前言 本文是<Python开发实战案例之网络爬虫>的第二部分:7000本电子书下载网络爬虫开发环境安装部署.配套视频课程详见51CTO学院. 二.章节目录 (1)Python开发环境依赖(2)Python依赖程序安装(3)Requests-html安装(4)Requests-html 源码框架下载(5)Requests-html 开发指导手册 三.正文 3.1 Python开发环境依赖 3.2 Python依赖程序安装 3.3 requests-html安装 3.4 requests-ht

Python网络爬虫实战案例之:7000本电子书下载(3)

一.前言 本文是<Python开发实战案例之网络爬虫>的第三部分:7000本电子书下载网络爬虫开发实战详解.配套视频课程详见51CTO学院请添加链接描述. 二.章节目录 3.1 业务流程3.2 页面结构分析:目录页3.3 页面结构分析:详情页3.4 页面请求和响应:目录页4.5 页面请求和响应:详情页3.4 三.正文 3.1 业务流程 3.2.1 页面结构分析-目录页 3.2.2 页面结构分析-详情页 3.3 页面请求与解析-目录页 3.4 页面请求与解析-详情页 3.5 文件下载 四.未完待

Python网络爬虫实战案例之:7000本电子书下载(4)

一.前言 本文是<Python开发实战案例之网络爬虫>的第四部分:7000本电子书下载网络爬虫-源码框架剖析.配套视频课程详见:51CTO学院. 二.章节目录 3.1 requests-html文件结构3.2 requests-html源码框架3.3 导入依赖库3.4 HTMLSession请求类3.5 HTMLResponse请求响应类3.6 HTML页面结构类 三.正文 3.1 requests-html 文件结构 3.2 requests-html源码框架 3.3 导入依赖库 3.4 H