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自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
python基于windows平台锁定键盘输入的方法
Mar 05 Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 Python
实例讲解python中的序列化知识点
Oct 08 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
详解KMP算法以及python如何实现
Sep 18 Python
python常量折叠基础知识点讲解
Feb 28 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 Python
Python简易开发之制作计算器
Apr 28 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操作MongoDB的技术总结
2013/06/02 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
vue基础之事件v-onclick="函数"用法示例
2019/03/11 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
关于python字符串方法分类详解
2019/08/20 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
python如何删除列为空的行
2020/07/17 Python
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
经理秘书岗位职责
2013/11/14 职场文书
新学期家长寄语
2014/01/19 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
2016年教师节慰问信
2015/12/01 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
2019销售早会主持词
2019/06/27 职场文书