起因

[email protected],同时她附了源码,我下载源码之后发现没办法运行,简单调试了一下,目前可以正常获取数据。现在把修改的代码贴在下面

# -*- coding: utf-8 -*-

"""

Created on Fri Jul 12 16:08:41 2019

@author: Single

"""

import requests

import urllib

import base64

import time

import re

import json

import rsa

import binascii

from bs4 import BeautifulSoup

import pandas as pd

import numpy as np

from requests.packages.urllib3.connectionpool import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

header = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

'Referer': 'https://weibo.com/?sudaref=www.baidu.com&display=0&retcode=6102',

'Connection': 'keep-alive'

}

class Login(object):

session = requests.session()

user_name = "17526922476"

pass_word = "zhuyilong"

def get_username(self):

# request.su = sinaSSOEncoder.base64.encode(urlencode(username));

return base64.b64encode(urllib.parse.quote(self.user_name).encode("utf-8")).decode("utf-8")

def get_pre_login(self):

# 取servertime, nonce,pubkey

# int(time.time() * 1000)

# 避免重复向weibo发请求(可能有些动态反爬,反复发请求会失败)

if hasattr(self, 'pre_login'):

return getattr(self, 'pre_login')

params = {

"entry": "weibo",

"callback": "sinaSSOController.preloginCallBack",

"su": self.get_username(),

"rsakt": "mod",

"checkpin": "1",

"client": "ssologin.js(v1.4.19)",

"_": int(time.time() * 1000)

}

try:

response = self.session.post("https://login.sina.com.cn/sso/prelogin.php", params=params, headers=header,

verify=False)

res = json.loads(re.search(r"\((?P.*)\)", response.text).group("data"))

self.pre_login = res

return res

except Exception as e:

print(e)

print("获取公钥失败")

return 0

def get_password(self):

# RSAKey.setPublic(me.rsaPubkey, "10001");

# password = RSAKey.encrypt([me.servertime, me.nonce].join("\t") + "\n" + password)

public_key = rsa.PublicKey(int(self.get_pre_login()["pubkey"], 16), int("10001", 16))

password_string = str(self.get_pre_login()["servertime"]) + '\t' + str(

self.get_pre_login()["nonce"]) + '\n' + self.pass_word

return binascii.b2a_hex(rsa.encrypt(password_string.encode("utf-8"), public_key)).decode("utf-8")

def login(self):

post_data = {

"entry": "weibo",

"gateway": "1",

"from": "",

"savestate": "7",

"qrcode_flag": "false",

"useticket": "1",

"vsnf": "1",

"su": self.get_username(),

"service": "miniblog",

"servertime": self.get_pre_login()["servertime"],

"nonce": self.get_pre_login()["nonce"],

"pwencode": "rsa2",

"rsakv": self.get_pre_login()["rsakv"],

"sp": self.get_password(),

"sr": "1536*864",

"encoding": "UTF-8",

"prelt": "529",

"url": "https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack",

"returntype": "TEXT"

}

login_data = self.session.post("https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)",

data=post_data, headers=header, verify=False)

params = {

"ticket": login_data.json()['ticket'],

"ssosavestate": int(time.time()),

"callback": "sinaSSOController.doCrossDomainCallBack",

"scriptId": "ssoscript0",

"client": "ssologin.js(v1.4.19)",

"_": int(time.time() * 1000)

}

self.session.post("https://passport.weibo.com/wbsso/login", params=params, verify=False, headers=header)

return self.session

login = Login()

session = login.login()

def get_page_session(date):

time.sleep(2)

return session.post(

"https://s.weibo.com/weibo/?q=%E6%9C%B1%E4%B8%80%E9%BE%99&typeall=1&suball=1×cope=custom:2019-07-01-4:2019-07-01-5&Refer=g&page=1",

verify=False, headers=header)

def get_data_session(date, page):

time.sleep(2)

return session.post(

"https://s.weibo.com/weibo/?q=%E6%9C%B1%E4%B8%80%E9%BE%99&typeall=1&suball=1×cope=custom:2019-07-01-4:2019-07-01-5&Refer=g&page=2",

verify=False, headers=header)

def get_page_res(date):

try:

return get_page_session(date)

except:

try:

return get_page_session(date)

except:

print("获取页码信息失败", date)

return 0

def get_data_res(date, page):

try:

return get_data_session(date, page)

except:

try:

return get_data_session(date, page)

except:

print("获取页码信息失败", date, page)

return 0

def get_page(date):

response = get_page_res(date)

if response:

try:

soup = BeautifulSoup(response.text, "html.parser")

pages = soup.find("ul", "s-scroll").find_all("li")

return len(pages)

except:

print("获取页码失败", date)

return 0

def get_data(date, page):

response = get_data_res(date, page)

data = list()

if response:

try:

soup = BeautifulSoup(response.text, "html.parser")

infos = soup.find_all('div', "content")

records = soup.find_all("div", "card-act")

for info, record in zip(infos[0:], records[0:]):

times = "".join(info.find('p', 'from').text)

data.append("".join(times.split()[0]))

data.append("".join(times.split()[1]))

user = info.find('a', "name")

data.append("".join(user.text))

content = info.find('p', "txt")

data.append("".join(content.text.strip().replace(' \u200b', '')))

recs = record.find_all('li')

data.append("".join(re.findall(r'转发 (.+?)', recs[1].text, re.S)))

data.append("".join(re.findall(r'评论 (.+?)', recs[2].text, re.S)))

data.append("".join(recs[3].text.split()))

except:

pass

return data

def save_data_to_csv(data):

data = np.array(data).reshape(-1, 7)

result_weibo = pd.DataFrame(data)

result_weibo.to_csv(data_file_name, index=False, encoding='gb18030', header=False)

data_file_name = "./朱一龙.csv"

column = pd.DataFrame(columns=['日期', '时间', '用户', '内容', '转发', '评论', '点赞'])

column.to_csv(data_file_name, index=False, encoding='gb18030')

save_data_to_csv(get_data(2019, 5))

原文:https://www.cnblogs.com/forcee/p/12497345.html

php rsa模拟登录微博,微博模拟登录爬虫相关推荐

  1. 验证码识别多账号微博自动模拟登录

    多账号微博自动模拟登录cookie写入数据库 多账号自动登录 注意点 文件目录 简单的运行 实现 selelogin登录模块 login登录脚本 思考 代码已经存放于github点击前往 多账号自动登 ...

  2. 登录成功后服务器响应跳转页面,Java模拟腾讯微博的网页登录成功

    继昨日[Java模拟腾讯微博的网页登录失败],终于找到了原因,问题出在登录时u1这个参数上. 在官方的JS中,"http://t.qq.com"是被URL编码后发送的,而我当时以为 ...

  3. python 登录新浪微博_模拟登录新浪微博(Python)

    PC 登录新浪微博时, 在客户端用js预先对用户名.密码都进行了加密, 而且在POST之前会GET 一组参数,这也将作为POST_DATA 的一部分. 这样, 就不能用通常的那种简单方法来模拟POST ...

  4. 网络协议模拟之QQ微博分享接口应用

    QQ微博在营销领域越来越受青睐了,这里面集成了很多非常有用的接口,像是邮件分享.空间分享.QQ分享.微信分享等.这相对于传统的直接模拟协议,登录邮箱等方式进行邮件发送甚至更有效.所有这些都没什么技术难 ...

  5. java判断用户是否在某一个区域登录_Java实现QQ登录和微博第三方登录

    来源:http://www.cnblogs.com/liuxianan转自公众号:Java后端 1. 前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了 QQ 和微博这 2 大常 ...

  6. php 微信第三方登录demo,第三方登录 - 快速接入微信、QQ、微博等第三方登录方式 – 基于ThinkPHP和Bootstrap的极速后台开发框架...

    此插件基于FastAdmin和Thinkphp5开发的第三方登录插件,可用于对接微.微博.QQ等第三方登录,目前CMS中的小程序账号登录绑定就是基于此插件开发,在使用CMS中的小程序登录功能之前请务必 ...

  7. 三方登录(微博为例)

    三方登录介绍 三方登录流程(以微博为例) 1)前端获取认证code 1. 在Vue页面加载时动态发送请求获取微博授权url 2. django收到请求的url后,通过微博应用ID(client_id) ...

  8. java加按钮_如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    阅读本文约需要8分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了HashMap和TreeMap的知识,今天跟大家分享下对 ...

  9. dedecms织梦第三方登录插件-QQ登录、微博登录、微信登录

    织梦程序集成第三方QQ登录.微博登录.微信登录,获取QQ.微博.微信,并存储至数据库,一键注册为网站会员,不用再次填写绑定信息,方便粘贴用户更强. 织梦第三方登录效果 第三方登录插件特点 1.所有文件 ...

  10. 新浪微博客户端开发之授权登录+获取微博列表

    新浪微博客户端开发之授权登录+获取微博列表 闲篇: 最近实在是乱得不行,至于怎么乱我也不知该怎么说,那么久没发博客就证明了这点,一般如果小巫有做详尽的计划,并把时间投入到上面的话,我是可以用最短的时间 ...

最新文章

  1. 如何用OpenCV制作一个低成本的立体相机
  2. python模拟ATM + 购物商城
  3. goahead content-length为0时的问题
  4. ssh secure shell
  5. 经典卷积神经网络--AlexNet的详解
  6. Delphi连接AutoCAD_计算任意线条的长度宏的嵌套
  7. 万用表检测常用元器件的方法
  8. C++实现井字棋小游戏(写得不好,留作纪念!!!)
  9. 管道实现父子进程的信息传递(二)【标准流和其文件描述符、fwrite函数、perror函数】
  10. 送书 | 推荐一个可能是最全的Venn图一站式绘制工具
  11. 深度长文:地球真的进入“人类世”时期了吗?
  12. 随想录(写给8-10年工作经验的同学)
  13. JS 中类型和类型转换
  14. MySQL数据库安装、初始化及修改密码
  15. pca各个向量之间的相关度_详细推导PCA算法
  16. 创建Docker私有仓库
  17. Java实现对cookie的增删改查
  18. python标准库之random模块
  19. [谈现在的PSP与NDSi]
  20. win10时间不准_简单几招教会你win10系统时间不准怎么解决

热门文章

  1. CTFshow web3 菜鸡刷题记录
  2. Rowid和Rownum的区别
  3. unity小技巧收集总结--自用(一)
  4. vue-cli3访问public文件夹静态资源的报错解决
  5. 小组取什么名字好_唐三和其他女神组CP取什么名字?当看到答案后,瞬间让人甜到掉牙...
  6. The server quit without updating PID file解决方法
  7. 不用全局plugin,项目在哭泣
  8. 开发必备linux命令大全-稳赚不亏
  9. java 浏览器发送传真_java---------发送网络传真
  10. 初步了解802.15.4协议与ZigBee