欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用rabbitmq實現(xiàn)網(wǎng)絡爬蟲示例

 更新時間:2014年02月20日 09:47:31   作者:  
這篇文章主要介紹了python使用RabbitMQ實現(xiàn)網(wǎng)絡爬蟲的示例,需要的朋友可以參考下

編寫tasks.py

復制代碼 代碼如下:

from celery import Celery
from tornado.httpclient import HTTPClient
app = Celery('tasks')
app.config_from_object('celeryconfig')
@app.task
def get_html(url):
    http_client = HTTPClient()
    try:
        response = http_client.fetch(url,follow_redirects=True)
        return response.body
    except httpclient.HTTPError as e:
        return None
    http_client.close()

編寫celeryconfig.py

復制代碼 代碼如下:

CELERY_IMPORTS = ('tasks',)
BROKER_URL = 'amqp://guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'amqp://'

編寫spider.py

復制代碼 代碼如下:

from tasks import get_html
from queue import Queue
from bs4 import BeautifulSoup
from urllib.parse import urlparse,urljoin
import threading
class spider(object):
    def __init__(self):
        self.visited={}
        self.queue=Queue()
    def process_html(self, html):
        pass
        #print(html)
    def _add_links_to_queue(self,url_base,html):
        soup = BeautifulSoup(html)
        links=soup.find_all('a')
        for link in links:
            try:
                url=link['href']
            except:
                pass
            else:
                url_com=urlparse(url)
                if not url_com.netloc:
                    self.queue.put(urljoin(url_base,url))
                else:
                    self.queue.put(url_com.geturl())
    def start(self,url):
        self.queue.put(url)
        for i in range(20):
            t = threading.Thread(target=self._worker)
            t.daemon = True
            t.start()
        self.queue.join()
    def _worker(self):
        while 1:
            url=self.queue.get()
            if url in self.visited:
                continue
            else:
                result=get_html.delay(url)
                try:
                    html=result.get(timeout=5)
                except Exception as e:
                    print(url)
                    print(e)
                self.process_html(html)
                self._add_links_to_queue(url,html)

                self.visited[url]=True
                self.queue.task_done()
s=spider()
s.start("http://www.dbjr.com.cn/")

由于html中某些特殊情況的存在,程序還有待完善。

相關文章

  • django中path和url函數(shù)的具體使用

    django中path和url函數(shù)的具體使用

    本文主要介紹了django中path和url函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Python處理日期方法詳細大全(30種方法)

    Python處理日期方法詳細大全(30種方法)

    這篇文章主要給大家介紹了關于Python處理日期方法詳細大全,文中共介紹了30種方法,Python程序能用很多方式處理日期和時間,轉換日期格式是一個常見的功能,Python提供了一個time和calendar模塊可以用于格式化日期和時間,需要的朋友可以參考下
    2023-12-12
  • python如何構建mock接口服務

    python如何構建mock接口服務

    這篇文章主要介紹了python如何構建mock接口服務,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python從入門到精通之環(huán)境搭建教程圖解

    Python從入門到精通之環(huán)境搭建教程圖解

    這篇文章主要介紹了Python從入門到精通之環(huán)境搭建,需要的朋友可以參考下
    2019-09-09
  • 基于PyQt5制作一個動態(tài)指針時鐘

    基于PyQt5制作一個動態(tài)指針時鐘

    這篇文章主要和大家分享如何利用Python中的PyQt5制作一個動態(tài)指針時鐘來顯示實時時間,文中的示例代碼講解詳細,需要的可以參考一下
    2022-02-02
  • Python線程之認識線程安全?

    Python線程之認識線程安全?

    這篇文章主要介紹了Python線程之認識線程安全,線程安全,名字就非常直接,在多線程情況下是安全的,多線程操作上的安全,下面學習線程安全的文章詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • python socket網(wǎng)絡編程之粘包問題詳解

    python socket網(wǎng)絡編程之粘包問題詳解

    這篇文章主要介紹了python socket網(wǎng)絡編程之粘包問題詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Pytest使用logging模塊寫日志的實例詳解

    Pytest使用logging模塊寫日志的實例詳解

    logging是python語言中的一個日志模塊,專門用來寫日志的,日志級別通常分為debug、info、warning、error、critical幾個級別,一般情況下,默認的日志級別為warning,在調(diào)試或者測試階段,下面就快速體驗一下logging模塊寫日志的用法,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • python常用數(shù)據(jù)結構字典梳理

    python常用數(shù)據(jù)結構字典梳理

    這篇文章主要介紹了python常用數(shù)據(jù)結構字典梳理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Django的用戶模塊與權限系統(tǒng)的示例代碼

    Django的用戶模塊與權限系統(tǒng)的示例代碼

    這篇文章主要介紹了Django的用戶模塊與權限系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07

最新評論