python 使用requests第三方库自动登陆新浪微博

python3爬虫登录微博(requests) 一、简介 小白一枚,如有不足,请不吝赐教。 本文总体架构和站内大佬的的差不太多,登录过程总共分为三个阶段:预登录,登录和最后的跳转登录。不过我查看站内大佬的资源以及github上的资源时发现,时间都是比较久远的了,对于现在的微博反爬技术稍稍有一点不足,比如现在登录需要特殊验证渠道去实现:扫码验证、微博内点击验证以及短信验证。鄙人都实现了,其实原理都差不多,因此我就发了这个相对于而言验证操作比较简单的来作为例子讲解。 二、过程分析 2.1 预登录 当我... 阅读详情

学习python的最初原因就是写爬虫,最近一直在写爬虫。感觉写爬虫的时候主要问题就是四个:页面分析,网站登录,反反爬虫,多线程并发。四个问题难度依次递增。刚开始的时候觉得页面分析挺没有头绪的,但是写过几次之后就有了套路,对页面中的自己感兴趣的内容的抓取也变得得心应手了。其次就是网站登录,这是写爬虫一定会遇到的问题,因为有些网站需要用户登录之后才可以查看,所以需要去分析网站的登录机制。难点在于,虽然用python写用户登录的步骤都是大同小异的,但是,因为每个网站的登录机制都是不一样的,登录的时候post的参数也是不一样的,分析部分有点难度。并且有些网站在post参数的时候,会在浏览器这边先用js给参数进行加密,如果不知道参数的加密方式那就麻烦了。反反爬虫和多线程并发都是当爬虫需要爬取的数据量很大的时候需要面对的问题。

之前写了知乎的网站登录,昨天开始又尝试写新浪的网站登录,打算最近把几个网站的登录都写写,多练练手。

首先是使用Chrome浏览器对发送的请求进行抓包:

这是在密码输入错误的情况下抓取的情况:


分析之后发现post的表单参数有


其中servertime,nonce,rsakv是从prelogin.php请求的返回数据中获取到的

su是经过加密之后的用户名,一次base64加密

sp是经过加密之后的密码,rsa加密方式加密过后的密码

su和sp的分析是通过网上看别人的文章看到的,自己想还没有那个能力

剩余的参数都是固定值,直接写死就好

知道参数构成之后,对生成参数,提交

登录成功之后返回的数据是类似于:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>ÐÂÀËͨÐÐÖ¤</title>


<script charset="utf-8" src="http://i.sso.sina.com.cn/js/ssologin.js"></script>
</head>
<body>
ÕýÔڵǼ ...
<script>
try{sinaSSOController.setCrossDomainUrlList({"retcode":0,"arrURL":["http:\/\/crosdom.weicaifu.com\/sso\/crosdom?action=login&savestate=1486607880","http:\/\/passport.97973.com\/sso\/crossdomain?action=login&savestate=1486607880","http:\/\/passport.weibo.cn\/sso\/crossdomain?action=login&savestate=1"]});}
		catch(e){
			var msg = e.message;
			var img = new Image();
			var type = 1;
			img.src = 'http://login.sina.com.cn/sso/debuglog?msg=' + msg +'&type=' + type;
		}try{sinaSSOController.crossDomainAction('login',function(){location.replace('http://passport.weibo.com/wbsso/login?ssosavestate=1486607880&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&ticket=ST-NTg1MjY3NTQzOA==-1455071880-ja-778ADEC6A0A90C1D06828059C554BED6&retcode=0');});}
		catch(e){
			var msg = e.message;
			var img = new Image();
			var type = 2;
			img.src = 'http://login.sina.com.cn/sso/debuglog?msg=' + msg +'&type=' + type;
		}
</script>
</body>
</html>
使用正则表达式找出

{location.replace('http://passport.weibo.com/wbsso/login?ssosavestate=1486607880&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&ticket=ST-NTg1MjY3NTQzOA==-1455071880-ja-778ADEC6A0A90C1D06828059C554BED6&retcode=0')
其中的url才是真正访问的url,对该url进行get请求获得返回数据
<html><head><script language='javascript'>parent.sinaSSOController.feedBackUrlCallBack({"result":true,"userinfo":{"uniqueid":"5812345438","userid":null,"displayname":null,"userdomain":"?wvr=5&lf=reg"},"redirect":"http:\/\/weibo.com\/nguide\/interest"});</script></head><body></body></html>

获取到其中的uniqueid,这应该是每个用户的唯一标识,构造一个http://weibo.com/u/uniqueid/home的url,get一下就能获取到微博首页了

附上完整代码:

#-*-coding:utf-8-*-
import requests
from bs4 import BeautifulSoup
import time
import json
import os
import base64
import urllib
import hashlib
import re
import rsa
import binascii


head = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Content-Type':'application/x-www-form-urlencoded',
        'Accept-Language':'zh-CN,zh;q=0.8',
        'Accept-Encoding':'gzip, deflate',
        'Cache-Control':'max-age=0',
        'Connection':'keep-alive',
        'Upgrade-Insecure-Requests':'1',
        'Origin':'http://weibo.com',
        "Referer":"http://weibo.com/",
        'User-Agent':'Mozilla/5.0(Windows NT 6.1;WOW64;Trident/7.0;rv:11.0)like Gecko',
        'Host':'login.sina.com.cn'}

data = {
    "entry":"weibo",
    "gateway":"1",
    "savestate":"7",
    "useticket":"1",
    "pagerefer":"https://www.baidu.com/link?url=3YSdEuAbjIWO9udn3LjIow1nWKq68fuNgSft3DzFvJu&wd=&eqid=91465358014ef6870000000356b9ac4e",
    "vsnf":"1",
    "su":"",
    "service":"miniblog",
    "servicetime":"",
    "nonce":"",
    "pwencode":"rsa2",
    "rsakv":"",
    "sp":"",
    "sr":"1366*768",
    "encoding":"UTF-8",
    "prelt":"76",
    "url":"http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack",
    "returntype":"META"
}



if __name__ == '__main__':
    email = "xxxxxxx@xx.xx"
    password = "xxxxxxx"
    pre_url = "http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=emhlZGFwYXQlNDAxNjMuY29t&rsakt=mod&client=ssologi"
    s = requests.session()
    res=s.get(pre_url)
    res = res.text.encode('utf-8').split('(')[-1].split(')')[0]
    pre_json = json.loads(res)
    print pre_json
    servertime = pre_json['servertime']
    nonce = pre_json['nonce']
    rsakv = pre_json['rsakv']
    pubkey = pre_json['pubkey']
    #urllib.quote()是进行url编码
    #su是经过一次base64加密之后的账号
    su = base64.encodestring(urllib.quote(email))[:-1]
    print "su:%s" % su
    #rsa2计算sp
    rsaPubkey = int(pubkey,16)
    key = rsa.PublicKey(rsaPubkey,65537)
    message = str(servertime) + '\t' + str(nonce) + '\n' + str(password)
    sp = rsa.encrypt(message,key)
    sp = binascii.b2a_hex(sp)
    print "sp:%s" % sp
    data['servertime'] = servertime
    data['nonce'] = nonce
    data['rsakv'] = rsakv
    data['su'] = su
    data['sp'] = sp

    #
    post_url = "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)&wsseretry=servertime_error"
    res = s.post(post_url,data = data)
    print res.text

    p = re.compile('location\.replace\(\'(.*?)\'\)')

    final_url = p.search(res.text.encode('utf-8')).group(1)
    res = s.get(final_url)
    print res.text
    res = res.text.encode('utf-8').split('(')[-1].split(')')[0]
    user_json = json.loads(res)
    uniqueid = user_json['userinfo']['uniqueid'].encode('utf-8')
    print user_json['userinfo']['uniqueid']

    main_url = "http://weibo.com/u/%s/home" % uniqueid
    res = s.get(main_url)
    print '登录成功'


51、Python入门 基于异步加载的简单登录 2. 创建会话:在`main`协程中,使用`aiohttp.ClientSession()`创建一个会话对象,该对象可以在多个请求之间共享连接和配置。1. 定义登录函数:`login`函数使用`async def`声明为协程,并使用`aiohttp`进行HTTP POST请求。4. 并发执行任务:使用`await asyncio.gather(*tasks)`并发执行所有任务,并收集它们的结果。3. 创建任务:使用列表推导式创建多个`login`任务,模拟多个用户同时登录。# 创建多个登录任务。 阅读详情

相关推荐

python使用cookie登陆新浪微博用户信息

在上一篇博客python模拟新浪微博登陆之获取cookies中,已经实现了登陆新浪微博并把cookie保存了下来。接下来通过得到的cookie去访问新浪微博其他页面,并获取我们想要的信息。顺便一提,我的软件是python2.7.10(64位),IDE是pycharm,win8.1系统环境。所用到的包是base64、rsa、binascii、re、requests。这里,我首先通过访问自己新浪微博主页

Bgods 8762

sinaweibopy3第三方模块包,调用微博API接口

sinaweibopy3模块调用微博接口 # -*- coding: utf-8 -*- import urllib.request import urllib.parse import json import logging import time # general json object that can bind any fields but also act as a dict. # a json class inhert dict class which can use d['key']

weixin_49183789的博客 605

python3[爬虫实战] 爬虫之requests爬取新浪微博京东客服

爬取的内容为京东客服的微博及评论 思路:主要是通过手机端访问新浪微博的api接口,然后进行数据的筛选, 类似于这样的:https://m.weibo.cn/u/5650743478?uid=5650743478&amp;luicode=10000011&amp;lfid=100103type%3D1%26q%3D%40%E4%BA%AC%E4%B8%9C%E5%AE%A2%E6%9C%8D&amp;featurecod

徐代龙的技术专栏 1万+

Python自动化实战,自动登录并发送微博

2)通过 name 定位:我们可以使用 find_element_by_name() 函数,比如我们想要对 name=key_word 的元素进行定位,就可以使用 browser.find_element_by_name(“key_word”)。获取xpath 路径,点击谷歌开发者工具左上角的小键头(选择元素),选择自己要查看的地方的,开发者工具就会自动定位到对应元素的源码位置,选中对应源码,然后右键,选择。8)通过 CSS 定位:使用 find_element_by_css_selector() 函数。

Trb201013的博客 2227

【python网络编程】新浪爬虫:关键词搜索爬取微博数据

上学期参加了一个大数据比赛,需要抓取大量数据,于是我从新浪微博下手,本来准备使用新浪的API的,无奈新浪并没有开放关键字搜索的API,所以只能用爬虫来获取了。幸运的是,新浪提供了一个高级搜索功能,为我们爬取数据提供了一个很好的切入点。 在查阅了一些资料,参考了一些爬虫的例子后,得到大体思路:构造URL,爬取网页,然后解析网页 具体往下看~ ...

weixin_34006965的博客 2889

新浪微博模拟登录的实现方法及实战演练

在数字化的今天,自动化脚本与程序模拟登录对开发者而言并不陌生,它可以让我们在不进行手动干预的情况下与网站或应用进行交互。这一章将带您深入理解模拟登录的基本原理,并概述如何实现一个基础的登录脚本。模拟登录的基本原理是通过编程方式,构造与浏览器中相同的HTTP请求。这通常包括但不限于:模拟用户输入的用户名和密码、处理第三方认证(如验证码)、维持会话状态等步骤。这一过程需要对HTTP协议有一定的了解,以及对目标网站的登录机制有清晰的洞察。

weixin_42601134的博客 767

python脚本使用谷歌自动登录微博

python脚本使用谷歌自动登录微博

m0_48294281的博客 956

Winform美化框架AntdUI中Table的使用方法

使用核心注意点: 数据模型中属性名需要完全与new Column里的列名一致否则添加数据源则无法读取到详细内容。

wevix的博客 3683

qpython3l手机版安装第三方库总是报错_python 使用requests第三方库自动登陆新浪微博 - 博客频道 - youkuaiyun.com...

刚入门做App时,仿照蚂蜂窝App做过第三方登录,但是只做了QQ登陆,但是没有留下系统的学习笔记,只记得按照QQ官网上一步步做下来,现在再做第三方登陆,在这留下学习笔记吧。 –华丽分割线— 根据Bmob官网上说明,微信登陆最麻烦,之前也做过QQ登陆,所以这次学习python的最初原因就是写爬虫,最近一直在写爬虫。感觉写爬虫的时候主要问题就是四个:页面分析,网站登录,反反爬虫,多线程并发。四个问题难...

weixin_39822629的博客 223

云漾AI创作平台实战:如何用GPT4.0+Midjourney快速生成商业级插画(附Prompt模板)

本文详细介绍了如何利用云漾AI创作平台结合GPT4.0和Midjourney快速生成商业级插画。通过智能文案生成与视觉化工作流,大幅提升创作效率,适用于电商、社交媒体等多种场景。文章包含实用Prompt模板和参数调整技巧,帮助设计师和内容创作者高效产出专业插画。

weixin_29251567的博客 219

IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略

本文深入解析IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略,涵盖其核心特性、硬件电阻调节技巧、I2C动态控制方案、散热设计优化及典型问题排查。IP2315支持多种快充协议,如Type-C PD、华为FCP等,适用于便携设备快速充电需求,并通过I2C实现灵活的充电参数设置,提升充电效率与安全性。

weixin_29248313的博客 539

python实现新浪微博的模拟登录

python实现新浪微博的模拟登录你好 你好 为了爬取新浪微博中的某些数据,我们必须得实现模拟登录,才能提高我们爬虫的爬取速度,下面我将代码放上来,有时间的话我再将代码中的部分详细说明 首先是sina_weibo_login方法(下图代码段),这个方法实现的具体的模拟微博登录的过程,需从配置文件中加载微博cookie,用户名,密码.运行完后悔返回一个带有cookie的SESSION,该SESSIO...

蓝并瓦的博客 1203

使用GitLab的VS Code插件 GitLab Workflow 来进行项目的DevOps管理,助力研发效能

使用VS Code的GitLab Workflow插件,进行项目的DevOps管理,将效率提升到MAX。直接在VScode中管理流水线,一键跳转到创建 Issues,MR

知无涯 5294

Python爬虫——新浪微博登陆

  一、前期准备:   编译环境:Python 3.4   Python库:requests、re、urllib、BeautifulSoup   二、实现分析:   尝试爬虫登陆网站时,会涉及到很多Javascript、验证码、cookies等很多的问题,为了避免太麻烦的登陆方式,我建议大家访问对应网站的移动版。比如访问新浪微博的移动版: weibo ,登陆网址为   login.weibo/login/,登陆界面为:      登陆界面比较简单,不涉及验证码和Javascript处理的问

iqifenxia的博客 1150

基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 317

基于Simulink的发动机管理系统中的自适应增压控制系统设计

通过上述详细设计步骤,我们成功开发了一个基于Simulink的自适应增压控制系统。该系统不仅能够实时监测和预测发动机的运行状态,动态调整增压压力目标值,还具备实时监控、故障诊断和保护功能,确保系统的安全性和可靠性。此外,通过仿真实验和硬件在环测试,我们验证了系统的性能,并对其进行了优化,使其能够更好地满足实际应用需求。这个项目展示了如何利用MATLAB/Simulink的强大功能,结合控制理论和工程实践,开发出高效、可靠的自适应增压控制系统。

MHD0815的博客 221

python模拟登录爬虫 简书_python爬虫入门之模拟登陆新浪微博

很多网页浏览都需要首先登陆,比如说新浪微博。当然,这里有一个小技巧,用手机3G版登陆。电脑版会有各种加密,动态加载什么的。我们就耍一下小流氓,柿子拣软的捏么。浏览器保持登陆是利用我们登陆时收到的cookies,发送给网站,这样网站就知道用户已经登陆过来。我们的思路是这样:首先提交账号密码登陆,接受cookies,然后才开始浏览微博。但是很多网站不仅需要提交账号密码,为了防止爬虫,他们会在登录页面源...

weixin_39943202的博客 414

vue项目表格甘特图开发

🧩 甘特图可以管理项目进度,生产进度等信息,管理者可以更直观的查看内容。

qq_35946021的博客 991

使用python进行新浪微博粉丝爬虫

由于最近没事在学python,正好最近也想趴下新浪微博上边的一些数据,在这里主要爬去的是一个人的粉丝具体信息(微博昵称,个人介绍,地址,通过什么方式进行关注),所以就学以致用,通过python来爬去微博上边的数据。 首先先说下环境啊,使用的是python3.5,然后使用的框架有: requests:用来获取html页面。 BeautifulSoup:用来进行html的解析,是一个在...

a14780429533的博客 792

嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)

例如,在一个便携式设备中,U-Boot 在启动时初始化电源控制器,将输出电压设置为合适的值。命令是u-boot构建过程中用于配置u-boot选项的命令。在嵌入式系统中,启动画面(也称为启动Logo或Splash Screen)是展示给用户的第一印象,它可以包含公司的标志、产品的名称或其他相关信息。u-boot允许通过环境变量来进行配置,这使得开发者可以根据不同的硬件平台和项目需求灵活地调整u-boot的行为。写入操作可以是字节级别的,也可以是块级别的,具体取决于设备的性能和操作系统的需求。

大模型大数据攻城狮的专栏 998

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python爬虫之新浪微博模拟登陆

#-*-coding:utf8-*- import requests from lxml import etree url = 'http://weibo.cn/u/xxxxxx' #此处请修改为微博地址 url_login = 'https://login.weibo.cn/login/' html = requests.get(url).content selector = etree.

果冻先生的专栏 821

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

微博登录记录pythonurllib_定向爬虫 - Python模拟新浪微博登录

当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息。模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容。实现微博登录的方法有很多,一般我们在模拟登录时首选WAP版。因为PC版网页源码中包括很多的js代码,提交的内容也更多,不适合机器模拟登录。我们实现微博登录的大体思路是这样的:用抓包工具把正常登录时要提交的字段都记录下来;模拟提交这些字段;判断...

weixin_39590566的博客 386

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python爬取微博数据存入数据库_Python爬取新浪微博评论数据,写入csv文件中

因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式操作步骤如下:1. 网页版登陆新浪微博2.打开m.weibo.cn3.查找自己感兴趣的话题,获取对应的数据接口链接4.获取cookies和headers# -*- coding: utf-8 -*-import requestsimport csvimport osbase_url = 'https://m.weibo.cn/api/co...

weixin_39616056的博客 1469

如何利用python刷微博粉丝_使用python进行新浪微博粉丝爬虫

由于最近没事在学python,正好最近也想趴下新浪微博上边的一些数据,在这里主要爬去的是一个人的粉丝具体信息(微博昵称,个人介绍,地址,通过什么方式进行关注),所以就学以致用,通过python来爬去微博上边的数据。首先先说下环境啊,使用的是python3.5,然后使用的框架有:requests:用来获取html页面。BeautifulSoup:用来进行html的解析,是一个在python爬虫中非常...

weixin_39664994的博客 1314

让你了解python的强大!【 登录新浪微博爬取粉丝信息】

环境: 系统:windows 7 版本:python 3.3 IDE: PyCharm 4.0.4 #!/usr/bin/env python3 # -- coding: utf-8 -- import time import base64 import rsa import binascii import requests import re import random try: imp...

weixin_45038034的博客 838

python爬取微博评论点赞数_爬取新浪微博评论及点赞数并存储为excel的.csv格式

1、获取cookie,先进入微博页面登陆微博,如进入https://m.weibo.cn/status/4173028302302955后登陆,再使用chrome的F12可方便地获取自己的cookie,获取Cookie所需的选择项如下图所示,往下拉会看到自己的Cookie。 2、写爬虫,代码如下,可以爬取诸如用户名 评论时间 点赞数 评论内容等等,保存为.py文件。本文参考了一些博客,但由于时间问...

weixin_31493023的博客 3675
上一篇: python 多线程下载图片
下一篇: 1089 Insert or Merge
Win_Man
博客等级 码龄12年 16粉丝 165原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值