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 相关文章推荐
pygame学习笔记(4):声音控制
Apr 15 Python
Python fileinput模块使用实例
Jun 03 Python
python 读写、创建 文件的方法(必看)
Sep 12 Python
PyQt5每天必学之事件与信号
Apr 20 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
Python中lru_cache的使用和实现详解
Jan 25 Python
如何用python识别滑块验证码中的缺口
Apr 01 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下载远程文件类(支持断点续传)
2008/11/14 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
python算法学习之基数排序实例
2013/12/18 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
Python列表解析配合if else的方法
2018/06/23 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
Python代码需要缩进吗
2020/07/01 Python
Django xadmin安装及使用详解
2020/10/26 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
会计职业生涯规划书
2014/01/13 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
化妆品活动策划方案
2014/05/23 职场文书
2015年环卫工作总结
2015/04/28 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
Java中的继承、多态以及封装
2022/04/11 Java/Android