微博登录的实现代码来源:https://gist.github.com/mrluanma/3621775


相关环境

使用的python3.4,发现配置好环境后可以直接使用pip easy_install命令安装第三方库,比如本示例需要依赖的库:

pip install requests
pip install rsa

代码实现

以下代码主要是登录成功后,爬取热闹微博的TOP 100,再保存到hotweb.html文件里边

import re
import json
import urllib.parse
import base64
import binascii
import json import rsa
import requests
import logging from pprint import pprint wbdom = r'd:\pyzone\hotwb.html';
weclient = 'ssologin.js(v1.4.5)'
FORMAT = '%(asctime)-15s %(message)s'
user_agent = (
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) '
'Chrome/20.0.1132.57 Safari/536.11'
) logging.basicConfig(level=logging.DEBUG, format=FORMAT)
logger = logging.getLogger('weibo')
session = requests.session()
session.headers['User-Agent'] = user_agent def encrypt_passwd(passwd, pubkey, servertime, nonce):
key = rsa.PublicKey(int(pubkey, 16), int('10001', 16))
message = str(servertime) + '\t' + str(nonce) + '\n' + str(passwd)
passwd = rsa.encrypt(message.encode(), key)
return binascii.b2a_hex(passwd) def wblogin(username, password):
resp = session.get(
'http://login.sina.com.cn/sso/prelogin.php?'
'entry=sso&callback=sinaSSOController.preloginCallBack&'
'su=%s&rsakt=mod&client=%s' %
(base64.b64encode(username), weclient)
) pre_login_str = re.match(r'[^{]+({.+?})', resp.content.decode('gbk')).group(1)
pre_login = json.loads(pre_login_str) pre_login = json.loads(pre_login_str)
data = {
'entry': 'weibo',
'gateway': 1,
'from': '',
'savestate': 7,
'userticket': 1,
'ssosimplelogin': 1,
'su': base64.b64encode(urllib.parse.quote(username).encode()),
'service': 'miniblog',
'servertime': pre_login['servertime'],
'nonce': pre_login['nonce'],
'vsnf': 1,
'vsnval': '',
'pwencode': 'rsa2',
'sp': encrypt_passwd(password, pre_login['pubkey'],
pre_login['servertime'], pre_login['nonce']),
'rsakv' : pre_login['rsakv'],
'encoding': 'gbk',
'prelt': '115',
'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.si'
'naSSOController.feedBackUrlCallBack',
'returntype': 'META'
}
resp = session.post(
'http://login.sina.com.cn/sso/login.php?client=%s' % weclient,
data=data
) login_url = re.search(r'replace\([\"\']([^\'\"]+)[\"\']',
resp.content.decode('gbk')).group(1)
resp = session.get(login_url)
login_str = re.match(r'[^{]+({.+?}})', resp.content.decode('gbk'))
if(login_str): # result is not None
logger.info('login success..')
login_str = json.loads(login_str.group(1))
pprint(login_str)
return True
else:
logger.info('login fail..')
return False def gethotwb(url):
f = open(wbdom, mode='a', encoding='utf-8')
for x in range(1,11): # page 1 to 10
r = session.get(url + str(x))
r.encoding = 'utf-8'
f.write('\n<p>--------page:'+ str(x) +'---------</p>\n\n')
f.write(json.loads(r.text)['data']['html'])
f.close() if __name__ == '__main__':
flag = wblogin(b'xx@163.com', 'xx')
if(flag):
gethotwb('http://hot.weibo.com/ajax/feed?type=h&v=9999&page=');

总结

  1. 测试的过程中连接了翻墙的VPN,异地登录需要验证码,此时retcode=4049,登录成功是0
  2. python各个版本之间不兼容好蛋痛

大家中秋快乐!

参考文档

requests文档 http://docs.python-requests.org/zh_CN/latest/

微博登录过程分析 http://www.cnblogs.com/pzxbc/archive/2012/02/03/2335027.html

python3使用requests爬取新浪热门微博的更多相关文章

  1. Python3:爬取新浪、网易、今日头条、UC四大网站新闻标题及内容

    Python3:爬取新浪.网易.今日头条.UC四大网站新闻标题及内容 以爬取相应网站的社会新闻内容为例: 一.新浪: 新浪网的新闻比较好爬取,我是用BeautifulSoup直接解析的,它并没有使用J ...

  2. selenium+BeautifulSoup+phantomjs爬取新浪新闻

    一 下载phantomjs,把phantomjs.exe的文件路径加到环境变量中,也可以phantomjs.exe拷贝到一个已存在的环境变量路径中,比如我用的anaconda,我把phantomjs. ...

  3. python3爬虫-爬取新浪新闻首页所有新闻标题

    准备工作:安装requests和BeautifulSoup4.打开cmd,输入如下命令 pip install requests pip install BeautifulSoup4 打开我们要爬取的 ...

  4. Python 爬虫实例(7)—— 爬取 新浪军事新闻

    我们打开新浪新闻,看到页面如下,首先去爬取一级 url,图片中蓝色圆圈部分 第二zh张图片,显示需要分页, 源代码: # coding:utf-8 import json import redis i ...

  5. python3+selenium3+requests爬取我的博客粉丝的名称

    爬取目标 1.本次代码是在python3上运行通过的 selenium3 +firefox59.0.1(最新) BeautifulSoup requests 2.爬取目标网站,我的博客:https:/ ...

  6. python2.7 爬虫初体验爬取新浪国内新闻_20161130

    python2.7 爬虫初学习 模块:BeautifulSoup requests 1.获取新浪国内新闻标题 2.获取新闻url 3.还没想好,想法是把第2步的url 获取到下载网页源代码 再去分析源 ...

  7. python爬取新浪股票数据—绘图【原创分享】

    目标:不做蜡烛图,只用折线图绘图,绘出四条线之间的关系. 注:未使用接口,仅爬虫学习,不做任何违法操作. """ 新浪财经,爬取历史股票数据 ""&q ...

  8. 【python3】爬取新浪的栏目分类

    目标地址: http://www.sina.com.cn/ 查看源代码,分析: 1 整个分类 在 div main-nav 里边包含 2 分组情况:1,4一组 . 2,3一组 . 5 一组 .6一组 ...

  9. xpath爬取新浪天气

    参考资料: http://cuiqingcai.com/1052.html http://cuiqingcai.com/2621.html http://www.cnblogs.com/jixin/p ...

随机推荐

  1. react环境搭建

    react-webpack文件夹是开发目录,在此目录下执行命令,假设你已经正确安装了 nodejs 一:参照教程搭建环境 https://github.com/newtriks/generator-r ...

  2. 设置repeater每行多少个的方法

    前台代码: <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">< ...

  3. 二维码QRCode

    package com.aig.ecompass.ecard; import java.awt.image.BufferedImage; import java.io.File; import jav ...

  4. 总结Qt中经常出现的一些问题

    1.Qt中用高版本打开低版本的工程 编译时出现错误 : C1189: #error :  "This file was generated using the moc from 4.7.0. ...

  5. 添加samba用户,并设置密码

    5.3.3 添加samba用户,并设置密码; 我们用的方法是先添加用户,但添加的这些用户都是虚拟用户,因为这些用户是不能通过SHELL登录系统的;另外值得注意的是系统用户密码和Samba用户的密码是不 ...

  6. hibernate_validator_01

    1.环境准备(Maven工程) <?xml version="1.0" encoding="UTF-8"?> <project xmlns=& ...

  7. 02_Jquery_02_元素选择器

    [简述] 元素选择器就是通过元素名来查询元素 $("elementName")这里就可以通过元素名来获取jquery元素了. 但与id选择器不同的是,名称相同的元素有很多,所以获取 ...

  8. ubuntu 安装qq

    受不了webqq那个界面 ,各种不习惯 .今天在ubuntu 12.04LTS 版本中 ,终于装上了qq2012,下面介绍一下安装方法 1  安装 wine sudo  apt-get install ...

  9. 常用js函数

    1.获得元素到页面的绝对距离 function getPos(obj) { var pos = {left:0, top:0}; while (obj) { pos.left += obj.offse ...

  10. SQL Cursor(游标)

    1.游标在数据表没有id(identity(1,1))时好用,但是游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量 2.如果能不用游标,尽量不要使用游标,用完用完之后一定要 ...