python3使用requests爬取新浪热门微博
微博登录的实现代码来源: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=');
总结
- 测试的过程中连接了翻墙的VPN,异地登录需要验证码,此时retcode=4049,登录成功是0
- python各个版本之间不兼容好蛋痛
大家中秋快乐!
参考文档
requests文档 http://docs.python-requests.org/zh_CN/latest/
微博登录过程分析 http://www.cnblogs.com/pzxbc/archive/2012/02/03/2335027.html
python3使用requests爬取新浪热门微博的更多相关文章
- Python3:爬取新浪、网易、今日头条、UC四大网站新闻标题及内容
Python3:爬取新浪.网易.今日头条.UC四大网站新闻标题及内容 以爬取相应网站的社会新闻内容为例: 一.新浪: 新浪网的新闻比较好爬取,我是用BeautifulSoup直接解析的,它并没有使用J ...
- selenium+BeautifulSoup+phantomjs爬取新浪新闻
一 下载phantomjs,把phantomjs.exe的文件路径加到环境变量中,也可以phantomjs.exe拷贝到一个已存在的环境变量路径中,比如我用的anaconda,我把phantomjs. ...
- python3爬虫-爬取新浪新闻首页所有新闻标题
准备工作:安装requests和BeautifulSoup4.打开cmd,输入如下命令 pip install requests pip install BeautifulSoup4 打开我们要爬取的 ...
- Python 爬虫实例(7)—— 爬取 新浪军事新闻
我们打开新浪新闻,看到页面如下,首先去爬取一级 url,图片中蓝色圆圈部分 第二zh张图片,显示需要分页, 源代码: # coding:utf-8 import json import redis i ...
- python3+selenium3+requests爬取我的博客粉丝的名称
爬取目标 1.本次代码是在python3上运行通过的 selenium3 +firefox59.0.1(最新) BeautifulSoup requests 2.爬取目标网站,我的博客:https:/ ...
- python2.7 爬虫初体验爬取新浪国内新闻_20161130
python2.7 爬虫初学习 模块:BeautifulSoup requests 1.获取新浪国内新闻标题 2.获取新闻url 3.还没想好,想法是把第2步的url 获取到下载网页源代码 再去分析源 ...
- python爬取新浪股票数据—绘图【原创分享】
目标:不做蜡烛图,只用折线图绘图,绘出四条线之间的关系. 注:未使用接口,仅爬虫学习,不做任何违法操作. """ 新浪财经,爬取历史股票数据 ""&q ...
- 【python3】爬取新浪的栏目分类
目标地址: http://www.sina.com.cn/ 查看源代码,分析: 1 整个分类 在 div main-nav 里边包含 2 分组情况:1,4一组 . 2,3一组 . 5 一组 .6一组 ...
- xpath爬取新浪天气
参考资料: http://cuiqingcai.com/1052.html http://cuiqingcai.com/2621.html http://www.cnblogs.com/jixin/p ...
随机推荐
- react 学习之十月之思
学习新技术,最怕的莫过于自己抱着莫大的决心去学习,然发现没有学到东西,这是很可怕的事情,但是能坚持下去,一点一点的消化知识点,并且去理解它是什么?有什么用?该怎么去用?使用的时候需要注意些什么呢? 这 ...
- hibernate篇章一
我只想说一句话FUCK! 昨晚查了一晚上资料. 今早细致勃勃的准备搭建环境,早上到现在失败!失败!失败!蛋疼 有兴趣的可以试试.我暂时搁置,去做分页了 有兴趣需要相关资料的可以查阅我的微博java66 ...
- ToString方法的不同格式总结
ToString()参数: 12345.ToString("n"); 生成 12,345.00 12345.ToString("C"); 生成 ¥12,345. ...
- 转载---SQL Server XML基础学习<1>之--FOR XML PATH
--> 测试数据:#tbIF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL DROP TABLE #tbGO CREATE TABLE #tb ...
- 格式太旧或是类型库无效。 (Exception from HRESULT: 0x80028019 (TYPE_E_UNSUPFORMAT))
错误提示信息 格式太旧或是类型库无效. (Exception from HRESULT: 0x80028019 (TYPE_E_UNSUPFORMAT)) . Old format or invali ...
- erlang 练手 进程环
Erlang 编程指南第四章 练习4-2 编写一个程序,生成N个进程并相连成环,启动环后绕环发送M个消息,当收到退出消息后终止. ringStart(M,N,Message, Cp) -> io ...
- 【实习记】2014-09-04浏览代码查middle资料+总结我折腾过的源码浏览器
浏览着代码,看源码可以先看make文件,make文件有制造的流程信息. 一般可以从运行的程序对应的cpp看起.然而如果有框架,那就不容易了,会关系错纵复杂. 总结一下我折腾过的源码阅读器. s ...
- CentOS安装+配置+远程
这篇博客我之前写在了csdn,转了过来,这篇是自己认为写的比较有技术含量的文章^_^ 最近和CentOS打了交到,其中遇到了很多问题,于是看了一些博客,解决了一些问题,但是都不是特别全面,所以想来一篇 ...
- PHP实现斐波那契数列非递归方法
斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n ...
- TDirectory.Delete 创建删除目录简单示例
使用函数: 1.System.IOUtils.TDirectory.CreateDirectory//创建目录 2.System.IOUtils.TDirectory.Exists // ...