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 相关文章推荐
Eclipse + Python 的安装与配置流程
Mar 05 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
Python 数据结构之旋转链表
Feb 25 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
python遍历小写英文字母的方法
Jan 02 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
int在python中的含义以及用法
Jun 27 Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 Python
python中append函数用法讲解
Dec 11 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 Python
python中的装饰器该如何使用
Jun 18 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
一些花式咖啡的配方
2021/03/03 冲泡冲煮
一个ftp类(ini.php)
2006/10/09 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
2015/12/03 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
js闭包学习心得总结
2018/04/17 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
python numpy实现rolling滚动案例
2020/06/08 Python
教学实习自我评价
2014/01/28 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
项目采购员岗位职责
2014/04/15 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
计算机毕业生求职信
2014/06/10 职场文书
学雷锋宣传标语
2014/06/25 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
pt-archiver 主键自增
2022/04/26 MySQL
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS