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


Posted in Python onFebruary 20, 2014

编写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("https://3water.com/")

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

Python 相关文章推荐
初学Python函数的笔记整理
Apr 07 Python
python输出指定月份日历的方法
Apr 23 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
Python读写及备份oracle数据库操作示例
May 17 Python
python实现定时提取实时日志程序
Jun 22 Python
padas 生成excel 增加sheet表的实例
Dec 11 Python
Python Django 命名空间模式的实现
Aug 09 Python
Python如何生成xml文件
Jun 04 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
Autopep8的使用(python自动编排工具)
Mar 02 Python
python库sklearn常用操作
Aug 23 Python
python使用win32com在百度空间插入html元素示例
Feb 20 #Python
python基础教程之类class定义使用方法
Feb 20 #Python
python基础教程之基本内置数据类型介绍
Feb 20 #Python
python实现dict版图遍历示例
Feb 19 #Python
使用python在校内发人人网状态(人人网看状态)
Feb 19 #Python
下载给定网页上图片的方法
Feb 18 #Python
使用python将mdb数据库文件导入postgresql数据库示例
Feb 17 #Python
You might like
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
9个比较实用的php代码片段
2016/03/15 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
人事主管岗位职责范本
2013/12/04 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
司机岗位职责说明书
2014/07/29 职场文书
2014年招生工作总结
2014/11/26 职场文书
大学军训决心书
2015/02/05 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android