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 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
Python requests发送post请求的一些疑点
May 20 Python
tensorflow实现逻辑回归模型
Sep 08 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
利用python如何在前程无忧高效投递简历
May 07 Python
解决pyecharts在jupyter notebook中使用报错问题
Apr 23 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
matplotlib更改窗口图标的方法示例
Feb 03 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 Python
python lambda 表达式形式分析
Apr 03 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中使用Oracle数据库(4)
2006/10/09 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
JavaScript多线程的实现方法
2007/05/08 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python转换HTML到Text纯文本的方法
2015/01/15 Python
python交互式图形编程实例(一)
2017/11/17 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
Python中的pack和unpack的使用
2018/03/12 Python
对python 命令的-u参数详解
2018/12/03 Python
学习Python爬虫的几点建议
2020/08/05 Python
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
财务会计大学生自我评价
2014/04/09 职场文书
一帮一活动总结
2014/05/08 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
捐书仪式主持词
2015/07/04 职场文书
任命书格式模板
2015/09/22 职场文书
学生安全责任协议书
2016/03/22 职场文书
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电