python多線程多隊列(BeautifulSoup網路爬蟲)

來源:互聯網
上載者:User

標籤:python   網路爬蟲   多線程   架構   同步隊列   

程式大概內容如下:

程式中設定兩個隊列分別為queue負責存放網址,out_queue負責存放網頁的原始碼。

ThreadUrl線程負責將隊列queue中網址的原始碼urlopen,存放到out_queue隊列中。

DatamineThread線程負責使用BeautifulSoup模組從out_queue網頁的原始碼中提取出想要的內容並輸出。

這隻是一個基本的架構,可以根據需求繼續擴充。

程式中有很詳細的注釋,如有有問題跪求指正啊。

import Queueimport threadingimport urllib2import timefrom BeautifulSoup import BeautifulSouphosts = ["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)


python多線程多隊列(BeautifulSoup網路爬蟲)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.