前言

对于很少玩微博@張行之_的我来说,微博内容少的可怜。所以本人就想:能不能写个成功程序来帮我发微博。这个程序要满足以下要求:

  1. 自动化,自动登录微博,自动发微博。
  2. 微博内容要有意义,不能是随机生成的字符。
  3. 可以设置每隔一段时间发一条微博,频率不能太快,当然也不能太慢。

于是,就诞生了这个程序,代码使用纯Python实现,没有使用微博SDK,主要是模拟HTTP操作。程序运行后会先登录微博,然后启动一个定时器,每隔一段时间爬取秒拍、cnBeta、博客园、TechWeb、推酷最新的内容,再转发到微博。

代码托管在GitHub上,项目地址:https://github.com/chaolongzhang/sinaWeibo.git

试用了几天,效果可以查看我的微博:@張行之_。

整体结构

程序分为3个模块:微博登录定时发微博微博内容生产。代码结构如下:

sinaWeibo
|----main.py
|----sinaWeiboLogin.py
|----config.py
|----logger.py
|----sendWeibo.py
|----TextFactory.py|spider|----__init__.py|----utility.py|----http.py|----spider.py|----cnbeta.py          //解析cbbeta|----cnblog.py          //解析博客园|----techweb.py       /解析techweb|----tuicool.py          //解析推酷|----.....                      //更多解析

##使用 如果你只想使用该代码来发微博,并不关心代码是怎么实现的,那么你只需要读这一节内容。 1. 下载,项目地址:

pip install rsa
pip install requests

2. 如果你的微博登录时要输入验证码,该代码是登录不成功的,可以在账号安全的登录保护中设置不输入验证码。 ##登录 登录网上有很多现成的方法,在GitHub上找到一个登录新浪微博的[Python代码][6],使用[requests][7],比urllib2更方便。代码依赖[requests][7]和[rsa][8]。代码有点旧,需要做一点修改。

WBCLIENT = 'ssologin.js(v1.4.5)' => WBCLIENT = 'ssologin.js(v1.4.18)'

两个正则表达式也需要修改下:

login_url = re.search(r'replace\([\"\']([^\'\"]+)[\"\']', resp.text).group(1)
改为:
login_url = re.search('replace\\(\'([^\']+)\'\\)', resp.text).group(1) login_str = re.match(r'[^{]+({.+?}})', resp.text).group(1)
改为:
login_str = login_str = re.search('\((\{.*\})\)', resp.text).group(1)

登录时要注意,如果需要输入验证码,这段代码是会登录失败的,可以在账号安全的登录保护中设置不输入验证码。 ##定时自动发微博 新浪微博发微博的接口是: `http://www.weibo.com/aj/mblog/add?ajwvr=6&__rnd=时间戳` 时间戳使用` int(time.time() * 1000`即可设置。 Post提交数据:

"location" : "v6_content_home",
"appkey" : "",
"style_type" : "1",
"pic_id" : "",
"text" : 微博内容,
"pdetail" : "",
"rank" : "0",
"rankid" : "",
"module" : "stissue",
"pub_type" : "dialog",
"_t" : "0", 

提交数据时需要设置Headers: `self.http.headers[“Referer”] = “http://www.weibo.com/u/%s/home?wvr=5” % str(self.uid)` uid在登录时会返回。 在Python中启动一个定时器(Timer),每当定时器触发的时候向这个接口Post数据就能实现自动发微博了。

def newTimer(self):self.timer = Timer(TIME_SLOG, self.main, ()).start()def stop(self):log("结束任务")self.timer.cancel()passdef main(self):self.sendWeibo()if TIMER_REPEAT:self.newTimer()def sendWeibo(self):text = TextFactory.getText()self.update(text)log(u"发送微博:" + text)

##微博内容生产 要产生有意义的微博内容,一般需要从网站上爬取。当然,也可以把内容写入文本再定时发送。内容都是从网上爬取的,因此需要实现一个爬虫,用Python的requests爬取网页非常方便,几行代码搞定。使用`SGMLParser`解析网页也是非常方便的。爬虫部分在爬取网页都是一样的,解析时不同,所以只需要分别对每一个网站实现一个[`SGMLParser`][10]子类就能实现多个网站的爬取了。 为了从不同网站爬取数据,代码实现一个轮询机制,用一个容器保存各个网站的爬虫对象,在每次获取微博内容时使用不同的爬虫对象。

spiders = [Spider(miaopai.HOME_URL, miaopai.MiaopaParser()),Spider(cnbeta.HOME_URL, cnbeta.CnbetaParser()),Spider(cnblog.HOME_URL, cnblog.CnblogParser()),Spider(techweb.HOME_URL, techweb.TechwebParser()),Spider(tuicool.HOME_URL, tuicool.TuicoolParser()),Spider(miaopai.HOME_URL, miaopai.MiaopaParser()),
]currentIndex = 0
count = len(spiders)def getText():spider = nextSpider()text = spider.getAMessage()return textdef nextSpider():global currentIndexspider = spiders[currentIndex]currentIndex = (currentIndex + 1) % countreturn spider

###添加爬虫 代码设计具有较好地扩展性,在爬虫类`spder.py`中定义一个解析属性

class Spider(object):def __init__(self, homeUrl, parser):super(Spider, self).__init__()self.homeUrl = homeUrlself.parser = parserdef getAMessage(self):html = http.get(self.homeUrl)self.parser.feed(html)return self.parser.getMsg()

在创建`Spider`对象时,只需要注入不同的解析对象,就能解析不同的网站内容了,甚至还可实现从其他渠道获取内容。 在`TextFactory.py`中实现了轮询机制,当有新的解析类时,只需在`TextFactory.py`中的`spiders`添加一个就行。

结语

该代码已经基本满足了前言的3点要求,不过还存在一些问题:

  1. 爬虫部分还存在很多冗余,可以进一步优化。
  2. 产生微博内容时可能会生成相同的内容,尤其是目标网站更新频率不高时。

代码托管在码托管在GitHub上,项目地址:https://github.com/chaolongzhang/sinaWeibo.git。

本文最早发表于: http://zh.5long.me
原文链接: http://zh.5long.me/2015/code-login-sina-weibo-update-weibo/
版权声明:自由转载-非商用-保持署名 | Creative Commons BY-NC 4.0

Python代码登录新浪微博并自动发微博相关推荐

  1. python怎么登录微博并发微博_Python代码登录新浪微博并自动发微博

    前言 对于很少玩微博@張行之_的我来说,微博内容少的可怜.所以本人就想:能不能写个成功程序来帮我发微博.这个程序要满足以下要求: 自动化,自动登录微博,自动发微博. 微博内容要有意义,不能是随机生成的 ...

  2. pythonurllib新浪微博_Python代码登录新浪微博并自动发微博

    前言 对于很少玩微博@張行之_的我来说,微博内容少的可怜.所以本人就想:能不能写个成功程序来帮我发微博.这个程序要满足以下要求: 自动化,自动登录微博,自动发微博. 微博内容要有意义,不能是随机生成的 ...

  3. 用python定时自动发微博_Python脚本实现自动发带图的微博

    要自动发微博最简单的办法无非是调用新浪微博的API(因为只是简单的发微博,就没必要用它的SDK了).参考开发文档http://open.weibo.com/wiki/API 进行代码编写 创建应用 要 ...

  4. python:从0开始自动发微博

    前言 由于学院的微博需要发早安,晚安,而我经常忘记发,所以索性写个自动发微博的程序,放到服务器上..... 一.微博 1.注册一个微博 略 2.注册一个应用 名称随便取一个就行,分类和平台选择我们最熟 ...

  5. Java调用 新浪微博API 接口发微博(包含js微博组件、springMVC新浪登录)详解

    参考自:http://www.myexception.cn/program/1930025.html https://blog.csdn.net/qq_36580777/article/details ...

  6. python 自动发微博 (微博H5接口)

    python自动发微博,调用微博H5接口 最近一直在研究这个,希望能用微博引流,话不多说 # /usr/bin/env python # -*- coding:utf-8 -*- import thr ...

  7. python 自动发微博_GitHub - RisingStar20/pf_send_weibo: 通过爬虫自动发微博的Python项目...

    pf_send_weibo 通过爬虫自动发微博的Python项目 要爬取的网站 配置自己的微博账号: USER_NAME 用户名 PASSWD 密码 # 登录方式 LOGIN_TYPE_UID = & ...

  8. java 微博sdk_Java基于新浪微博SDK实现发微博的功能

    背景 最近用实现了一个简单的发微博的功能. 新浪微博的SDK已经经历了多次更新,而网上的资料.教程大多还是基于旧版本的,很多细节上有了一些变化.本文将基于最新的新浪微博SDK介绍发微博的过程. 简介 ...

  9. Java调用 新浪微博API 接口发微博,逐项讲解,绝对清晰

    转载自:http://www.myexception.cn/program/1930025.html Java调用 新浪微博API 接口发微博,逐条讲解,绝对清晰 最近要做个课程设计,使用微博控制树莓 ...

最新文章

  1. Java类的连接与初始化 (及2013阿里初始化笔试题解析)
  2. java if else 过多_Java中if-else过多怎么解决
  3. 删除所有的视图,存储过程
  4. 一文读懂阿里云数据库Autoscaling是如何工作的
  5. Homework 1_SQL Server中由于外键约束而删除数据失败
  6. 高性能分布式锁-redisson
  7. 递归算法1加到100_「算法」北京大学算法基础—递归(1)
  8. Redis各个数据类型的使用场景
  9. vuejs切换导航条高亮路由高亮做法
  10. PMP第六版 十五至尊图
  11. AutoRunner 功能自动化测试项目实训之AutoRunner的下载安装(十九)
  12. 秒懂!什么是BI商业智能!
  13. virtuoso 安装与使用
  14. 电脑广告弹窗如何操作过滤屏蔽,经验技巧!怎样设置弹窗自动拦截?
  15. 列出一些既好玩又能提高英语水平的电脑游戏
  16. 财神来了 | 存量资金博弈下,是谁在吸血
  17. cesium实现流入迁徙图(仿echarts)(着色器)(cesium篇.52)
  18. 增强学习系列之(二):实现一个简单的增强学习的例子
  19. 经典升级,长直播,马上开课 | 第 20 期高级转录组分析和R数据可视化火热报名中!!!...
  20. 移动硬盘只能识别一个分区,另一个变为RAW的解决办法

热门文章

  1. LeetCode刷题进阶之换酒问题(1518)
  2. 解决sed替换文本,里面含有“/“、“#”等特殊字符的问题
  3. 百度 2014 校园招聘 软件研发工程师 笔试题(天津站)
  4. 瘦客户端、胖客户端、智能客户端
  5. CentOS7下搭建Discuz论坛
  6. 供应链设计-SCM(杂记1基础)
  7. 物联网结课设计----QT串口通信RFID门禁系统
  8. 如何领取支付宝收款码
  9. 网口 激光雷达配置
  10. 企业软文如何推广,有哪些技巧、注意事项?