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中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
python基于windows平台锁定键盘输入的方法
Mar 05 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
numpy中矩阵合并的实例
Jun 15 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
python匿名函数用法实例分析
Aug 03 Python
python调用支付宝支付接口流程
Aug 15 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
Python图像处理库PIL详细使用说明
Apr 06 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
B2K与车机的中波PK
2021/03/02 无线电
PHP函数utf8转gb2312编码
2006/12/21 PHP
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
python3.5仿微软计算器程序
2020/03/30 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
物流管理专业毕业生求职信
2014/03/23 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
承兑汇票延期证明
2015/06/23 职场文书
单位病假条范文
2015/08/17 职场文书
单位提档介绍信
2015/10/22 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技