首页 后端开发 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

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在PHP中使用RabbitMQ实现分布式消息处理 如何在PHP中使用RabbitMQ实现分布式消息处理 Jul 18, 2023 am 11:00 AM

如何在PHP中使用RabbitMQ实现分布式消息处理

如何利用React和RabbitMQ构建可靠的消息传递应用 如何利用React和RabbitMQ构建可靠的消息传递应用 Sep 28, 2023 pm 08:24 PM

如何利用React和RabbitMQ构建可靠的消息传递应用

如何利用React和Python构建强大的网络爬虫应用 如何利用React和Python构建强大的网络爬虫应用 Sep 26, 2023 pm 01:04 PM

如何利用React和Python构建强大的网络爬虫应用

Golang与RabbitMQ实现实时数据同步的解决方案 Golang与RabbitMQ实现实时数据同步的解决方案 Sep 27, 2023 pm 10:41 PM

Golang与RabbitMQ实现实时数据同步的解决方案

Golang RabbitMQ: 实现高可用的消息队列系统的架构设计和实现 Golang RabbitMQ: 实现高可用的消息队列系统的架构设计和实现 Sep 28, 2023 am 08:18 AM

Golang RabbitMQ: 实现高可用的消息队列系统的架构设计和实现

PHP学习笔记:网络爬虫与数据采集 PHP学习笔记:网络爬虫与数据采集 Oct 08, 2023 pm 12:04 PM

PHP学习笔记:网络爬虫与数据采集

使用Vue.js和Perl语言开发高效的网络爬虫和数据抓取工具 使用Vue.js和Perl语言开发高效的网络爬虫和数据抓取工具 Jul 31, 2023 pm 06:43 PM

使用Vue.js和Perl语言开发高效的网络爬虫和数据抓取工具

网络爬虫的常用技术有哪些 网络爬虫的常用技术有哪些 Nov 10, 2023 pm 05:44 PM

网络爬虫的常用技术有哪些

See all articles