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根据出生日期获得年龄的方法
Mar 31 Python
Python写入CSV文件的方法
Jul 08 Python
深入浅析python继承问题
May 29 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
Pytorch之Variable的用法
Dec 31 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
Python如何用filter函数筛选数据
Mar 05 Python
python如何编写win程序
Jun 08 Python
LyScript实现绕过反调试保护的示例详解
Aug 14 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
8个出色的WordPress SEO插件收集
2011/02/26 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
jquery常用操作小结
2014/07/21 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
python入门基础之用户输入与模块初认识
2016/11/14 Python
Python中函数参数调用方式分析
2018/08/09 Python
python实现学员管理系统
2019/02/26 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
软件工程师岗位职责
2013/11/16 职场文书
最热门的自我评价
2013/12/30 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
课程设计的心得体会
2014/09/03 职场文书
群众路线表态发言材料
2014/10/17 职场文书
检讨书怎么写
2015/05/07 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL