ホームページ バックエンド開発 Python チュートリアル python使用rabbitmq实现网络爬虫示例

python使用rabbitmq实现网络爬虫示例

Jun 06, 2016 am 11:29 AM
rabbitmq ウェブ クローラー

编写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.bitsCN.com/")

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

React と RabbitMQ を使用して信頼性の高いメッセージング アプリを構築する方法 React と RabbitMQ を使用して信頼性の高いメッセージング アプリを構築する方法 Sep 28, 2023 pm 08:24 PM

React と RabbitMQ を使用して信頼性の高いメッセージング アプリケーションを構築する方法 はじめに: 最新のアプリケーションは、リアルタイム更新やデータ同期などの機能を実現するために、信頼性の高いメッセージングをサポートする必要があります。 React はユーザー インターフェイスを構築するための人気のある JavaScript ライブラリであり、RabbitMQ は信頼性の高いメッセージング ミドルウェアです。この記事では、React と RabbitMQ を組み合わせて信頼性の高いメッセージング アプリケーションを構築する方法を紹介し、具体的なコード例を示します。 RabbitMQ の概要:

RabbitMQ を使用して PHP で分散メッセージ処理を実装する方法 RabbitMQ を使用して PHP で分散メッセージ処理を実装する方法 Jul 18, 2023 am 11:00 AM

RabbitMQ を使用して PHP で分散メッセージ処理を実装する方法 はじめに: 大規模なアプリケーション開発では、分散システムが一般的な要件になっています。分散メッセージ処理は、タスクを複数の処理ノードに分散することでシステムの効率と信頼性を向上させるパターンです。 RabbitMQ は、AMQP プロトコルを使用してメッセージの配信と処理を実装する、オープンソースの信頼性の高いメッセージ キュー システムです。この記事では、配布のために PHP で RabbitMQ を使用する方法について説明します。

Golang と RabbitMQ 間のリアルタイム データ同期のためのソリューション Golang と RabbitMQ 間のリアルタイム データ同期のためのソリューション Sep 27, 2023 pm 10:41 PM

Golang と RabbitMQ 間のリアルタイム データ同期ソリューションの紹介: 今日の時代では、インターネットの普及とデータ量の爆発的な増加に伴い、リアルタイム データ同期の重要性がますます高まっています。非同期データ送信とデータ同期の問題を解決するために、多くの企業はメッセージ キューを使用してデータのリアルタイム同期を実現し始めています。この記事では、Golang と RabbitMQ に基づくリアルタイム データ同期ソリューションを紹介し、具体的なコード例を示します。 1. RabbitMQ とは何ですか?ラビ

React と Python を使用して強力な Web クローラー アプリケーションを構築する方法 React と Python を使用して強力な Web クローラー アプリケーションを構築する方法 Sep 26, 2023 pm 01:04 PM

React と Python を使用して強力な Web クローラー アプリケーションを構築する方法 はじめに: Web クローラーは、インターネット経由で Web ページ データをクロールするために使用される自動プログラムです。インターネットの継続的な発展とデータの爆発的な増加に伴い、Web クローラーの人気はますます高まっています。この記事では、React と Python という 2 つの人気のあるテクノロジーを使用して、強力な Web クローラー アプリケーションを構築する方法を紹介します。フロントエンド フレームワークとしての React とクローラー エンジンとしての Python の利点を探り、具体的なコード例を示します。 1. のために

Golang RabbitMQ: 高可用性メッセージ キュー システムのアーキテクチャ設計と実装 Golang RabbitMQ: 高可用性メッセージ キュー システムのアーキテクチャ設計と実装 Sep 28, 2023 am 08:18 AM

GolangRabbitMQ: 高可用性メッセージ キュー システムのアーキテクチャ設計と実装には、特定のコード サンプルが必要です はじめに: インターネット技術の継続的な開発とその広範な応用により、メッセージ キューは現代のソフトウェア システムに不可欠な部分になりました。メッセージ キューは、デカップリング、非同期通信、フォールト トレラント処理、その他の機能を実装するツールとして、分散システムに高可用性とスケーラビリティのサポートを提供します。 Golang は効率的で簡潔なプログラミング言語として、同時実行性とパフォーマンスの高いシステムを構築するために広く使用されています。

Vue.js と Perl 言語を使用して効率的な Web クローラーとデータ スクレイピング ツールを開発します。 Vue.js と Perl 言語を使用して効率的な Web クローラーとデータ スクレイピング ツールを開発します。 Jul 31, 2023 pm 06:43 PM

Vue.js と Perl 言語を使用して、効率的な Web クローラーとデータ スクレイピング ツールを開発します。近年、インターネットの急速な発展とデータの重要性の増大に伴い、Web クローラーとデータ スクレイピング ツールの需要も増加しています。この文脈では、Vue.js と Perl 言語を組み合わせて効率的な Web クローラーとデータ スクレイピング ツールを開発することは良い選択です。この記事では、Vue.js と Perl 言語を使用してこのようなツールを開発する方法を紹介し、対応するコード例を添付します。 1. Vue.js と Perl 言語の概要

PHP 学習ノート: Web クローラーとデータ収集 PHP 学習ノート: Web クローラーとデータ収集 Oct 08, 2023 pm 12:04 PM

PHP 学習メモ: Web クローラーとデータ収集 はじめに: Web クローラーは、インターネットからデータを自動的にクロールするツールで、人間の行動をシミュレートし、Web ページを閲覧し、必要なデータを収集できます。 PHP は、人気のあるサーバーサイド スクリプト言語として、Web クローラーとデータ収集の分野でも重要な役割を果たしています。この記事では、PHP を使用して Web クローラーを作成する方法を説明し、実践的なコード例を示します。 1. Web クローラーの基本原則 Web クローラーの基本原則は、HTTP リクエストを送信し、サーバーの H レスポンスを受信して​​解析することです。

Golang の RabbitMQ を使用した複数のメッセージ モードの比較と選択 Golang の RabbitMQ を使用した複数のメッセージ モードの比較と選択 Sep 28, 2023 pm 12:10 PM

Golang での RabbitMQ を使用した複数のメッセージ モードの比較と選択 はじめに: 分散システムでは、メッセージ キューは、メッセージの送信者と受信者を分離し、非同期通信を実装するために使用される一般的な通信メカニズムです。現在最も人気のあるメッセージ キューの 1 つである RabbitMQ は、開発者が選択できるさまざまなメッセージ モードを提供します。この記事では、RabbitMQ の 4 つの古典的なメッセージ モード (シンプル キュー、ワーク キュー、パブリッシュ/サブスクライブ モード、トピック モード) を比較し、それらの特性と適用可能なシナリオを分析します。

See all articles