Python爬虫教程-新浪微博分布式爬虫分享
爬虫功能:
此项目实现将单机的新浪微博爬虫重构成分布式爬虫。
Master机只管任务调度,不管爬数据;Slaver机只管将Request抛给Master机,需要Request的时候再从Master机拿。
环境、架构:
开发语言:Python2.7
开发环境:64位Windows8系统,4G内存,i7-3612QM处理器。
数据库:MongoDB 3.2.0、Redis 3.0.501
(Python编辑器:Pycharm;MongoDB管理工具:MongoBooster;Redis管理工具:RedisStudio)
爬虫框架使用 Scrapy,使用 scrapy_redis 和 Redis 实现分布式。
分布式中有一台机充当Master,安装Redis进行任务调度,其余机子充当Slaver只管从Master那里拿任务去爬。原理是:Slaver运行的时候,scrapy遇到Request并不是交给spider去爬,而是统一交给Master机上的Redis数据库,spider要爬的Request也都是从Redis中取来的,而Redis接收到Request后先去重再存入数据库,哪个Slaver要Request了再给它,由此实现任务协同。
使用说明:
Python需要安装好Scrapy、pymongo、json、base64、requests。
Master机只需要安装好Redis即可(内存要求大点),Slaver机需要安装python环境和MongoDB来存储数据。如果想要将数据都存储到一台机子上,直接改一下爬虫程序(pipeline)里面MongoDB的IP即可,或者建议搭建一个MongoDB集群。Redis和MongoDB都是安装好即可,不需要配置。
将你用来登录的微博账号和密码加入到 cookies.py 文件中,里面已经有两个账号作为格式参考了。
可以修改scrapy里面setting的设置,例如间隔时间、日志级别、redis的IP等等。
以上配置完以后运行 Begin.py 即可。重申Master机不需要跑程序,它的功能是利用Redis进行任务调度。Slaver机跑爬虫,新增一台Slaver机,只需要把python环境和MongoDB搭建好,然后将代码复制过去直接运行就行了。
项目源码
- # encoding=utf-8
- import json
- import base64
- import requests
- """
- 输入你的微博账号和密码,可去淘宝买,一元七个。
- 建议买几十个,微博反扒的厉害,太频繁了会出现302转移。
- 或者你也可以把时间间隔调大点。
- """
- myWeiBo = [
- {'no': 'jiadieyuso3319@163.com', 'psw': 'a123456'},
- {'no': 'shudieful3618@163.com', 'psw': 'a123456'},
- ]
- def getCookies(weibo):
- """ 获取Cookies """
- cookies = []
- loginURL = r'https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)'
- for elem in weibo:
- account = elem['no']
- password = elem['psw']
- username = base64.b64encode(account.encode('utf-8')).decode('utf-8')
- postData = {
- "entry": "sso",
- "gateway": "",
- "from": "null",
- "savestate": "",
- "useticket": "",
- "pagerefer": "",
- "vsnf": "",
- "su": username,
- "service": "sso",
- "sp": password,
- "sr": "1440*900",
- "encoding": "UTF-8",
- "cdult": "",
- "domain": "sina.com.cn",
- "prelt": "",
- "returntype": "TEXT",
- }
- session = requests.Session()
- r = session.post(loginURL, data=postData)
- jsonStr = r.content.decode('gbk')
- info = json.loads(jsonStr)
- if info["retcode"] == "":
- print "Get Cookie Success!( Account:%s )" % account
- cookie = session.cookies.get_dict()
- cookies.append(cookie)
- else:
- print "Failed!( Reason:%s )" % info['reason']
- return cookies
- cookies = getCookies(myWeiBo)
- print "Get Cookies Finish!( Num:%d)" % len(cookies)
在成为一个优秀的Python开发工程师的道路上,充满了汗水和辛劳
初学者对Python开发能做什么,学的时候该按照什么线路去学习,学完往哪方面发展?想深入系统了解Python可以复制有道云链接到浏览器打开系统的了解学习:http://note.youdao.com/noteshare?id=e4fa02e7b56d7909a27674cdb3da08aa
开发工具、学习资料等都有分享,还有专业的老师在线免费直播分享答疑!
Python爬虫教程-新浪微博分布式爬虫分享的更多相关文章
- 基于Python,scrapy,redis的分布式爬虫实现框架
原文 http://www.xgezhang.com/python_scrapy_redis_crawler.html 爬虫技术,无论是在学术领域,还是在工程领域,都扮演者非常重要的角色.相比于其他 ...
- 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验
一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...
- Scrapy 教程(八)-分布式爬虫
scrapy 本身并不是一个分布式框架,而 Scrapy-redis 库使得分布式成为可能: Scrapy-redis 并没有重构框架,而是基于redis数据库重写了框架的某些组件. 分布式框架要解决 ...
- [scrapy-redis] 将scrapy爬虫改造成分布式爬虫 (2)
1. 修改redis设置 redis默认处在protection mode, 修改/etc/redis.conf, protected-mode no, 或者给redis设置密码, 将bind 127 ...
- Python爬虫教程-34-分布式爬虫介绍
Python爬虫教程-34-分布式爬虫介绍 分布式爬虫在实际应用中还算是多的,本篇简单介绍一下分布式爬虫 什么是分布式爬虫 分布式爬虫就是多台计算机上都安装爬虫程序,重点是联合采集.单机爬虫就是只在一 ...
- python3 分布式爬虫
背景 部门(东方IC.图虫)业务驱动,需要搜集大量图片资源,做数据分析,以及正版图片维权.前期主要用node做爬虫(业务比较简单,对node比较熟悉).随着业务需求的变化,大规模爬虫遇到各种问题.py ...
- 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储
http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...
- 【收藏】收集的各种Python爬虫、暗网爬虫、豆瓣爬虫、抖音爬虫 Github1万+星
收集的各种Python爬虫.暗网爬虫.豆瓣爬虫 Github 1万+星 磁力搜索网站2020/01/07更新 https://www.cnblogs.com/cilisousuo/p/1209954 ...
- 初学者的分布式Python爬虫教程
下面是一个超级计算机的排行榜,如果我们能拥有其中任意一个,那么我们就不需要搞什么分布式系统.可是我们买不起,即使买得起,也交不起电费,所以我们只好费脑子搞分布式. 分布式的本质就如上期提到的一个概念: ...
随机推荐
- 减轻集群负载、三种k8s 替代openstack的解决方案
减轻集群负载.三种k8s 替代openstack的解决方案 待办 https://news.ycombinator.com/item?id=17013779 kubevirt https://host ...
- Duizi and Shunzi HDU
Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- python中给函数传参是传值还是传引用
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- 寒假安卓app开发学习记录(4)
今天的任务第一个项目运行并部署.没想到第一个环节就出现了错误,运行之后eclipse报错:Errors occurred during the build.Errors running builder ...
- P&R 5
Floorplan: 要做好floorplan需要掌握哪些知识跟技能? 通常,遇到floorplan问题,大致的debug步骤跟方法有哪些? 如何衡量floorplan的QA? 芯片的整体架构模块划分 ...
- PHP+Mysql防止SQL注入的方法
这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 方法一: mysql_real_escape_string -- 转义 S ...
- windows10 -- mysql5.5 + python3.4 + django1.11 +pycharm2016.2 + PyMySQL(DB DRIVER) 环境搭建
环境介绍 2016-07-2513:32:26 name value comment OS win10 操作系统 python python3.4 python主程序 IDE pycharm: 20 ...
- sqli-libs(5-10关)
Less_5 补充基础知识 1. left(a,b)左侧截取a的前b位,正确则返回1,错误则返回o Select left(database(),1)=’s’; 其中database()为sec ...
- AngularJS Learning Notes
AngularJS 简介 AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过 指令 扩展了 HTML ...
- Scrapy模拟登陆
1. 为什么需要模拟登陆? #获取cookie,能够爬取登陆后的页面 2. 回顾: requests是如何模拟登陆的? #1.直接携带cookies请求页面 #2.找接口发送post请求存储cooki ...