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 2.7.14安装图文教程
Apr 08 Python
PyTorch基本数据类型(一)
May 22 Python
基于python-opencv3的图像显示和保存操作
Jun 27 Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
Python递归实现打印多重列表代码
Feb 27 Python
jupyter notebook参数化运行python方式
Apr 10 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 11 Python
Python 中 Shutil 模块详情
Nov 11 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
关于php内存不够用的快速解决方法
2013/10/26 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP crc32()函数讲解
2019/02/14 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python如何获取系统iops示例代码
2016/09/06 Python
python中解析json格式文件的方法示例
2017/05/03 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
人事部主管岗位职责
2013/12/26 职场文书
六查六看剖析材料
2014/02/15 职场文书
社区反邪教工作方案
2014/06/16 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
党小组鉴定意见
2015/06/02 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
MySQL快速插入一亿测试数据
2021/06/23 MySQL