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 相关文章推荐
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
使用OpenCV circle函数图像上画圆的示例代码
Dec 27 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
python实现梯度下降算法的实例详解
Aug 17 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 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
图解上海144收音机
2021/03/02 无线电
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
JavaScript执行顺序详细介绍
2013/12/04 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python 接口返回的json字符串实例
2018/03/27 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
python滑块验证码的破解实现
2019/11/10 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
历史教育专业个人求职信
2013/12/13 职场文书
教师个人自我鉴定
2014/02/08 职场文书
企业宗旨标语
2014/06/10 职场文书
个人收入证明模板
2014/09/18 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
python代码实现扫码关注公众号登录的实战
2021/11/01 Python
聊聊redis-dump工具安装问题
2022/01/18 Redis
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技