博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3使用requests爬取新浪热门微博
阅读量:4705 次
发布时间:2019-06-10

本文共 3484 字,大约阅读时间需要 11 分钟。

微博登录的实现代码来源:


相关环境

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

pip install requestspip install rsa

代码实现

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

import reimport jsonimport urllib.parseimport base64import binasciiimport json import rsaimport requestsimport loggingfrom 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 Falsedef 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

--------page:'+ str(x) +'---------

\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. 测试的过程中连接了FQ的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

转载于:https://www.cnblogs.com/liaoyu/p/parse-hot-weibo.html

你可能感兴趣的文章
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>