专栏首页林澈思的茶微博爬虫——自动获取访客Cookie

微博爬虫——自动获取访客Cookie

简介面对微博的Sina Visitor System,我们该如何有效的绕过呢?本文将介绍一种绕过Sina Visitor System的方法。

0、前言


做过微博爬虫的应该都知道微博存在一个Sina Visitor System,即无需登录就能访问的页面,也需要获得一个访客cookie才能访问。如果我们直接对微博页面爬取,那么返回的页面全都是Sina Visitor System的页面。

因此,我们在这里分析一下Sina Visitor System生成访客Cookie的原理,同时实现自动化获取有效访客Cookie,以此绕过微博Sina Visitor System系统。

1、Sina Visitor System原理


1.1、基本流程


首先,我们看一下加载微博界面的整个流程。这里我们随便选取了一个用户的页面作为展示:

可以看到,中间红框部分就是新浪访客系统分配访客Cookie的过程。我们只要分析一下整个过程工作的原理,就可以自动化获取到足够多的访客Cookie,以此支持我们的爬虫可以不间断的爬取。

首先看一下红框中的第一个请求,这里就是Sina Visitor System。我们进去查看一下,在首部引入了一个js文件,可以发现这就是上述红框请求中第二个请求;然后就是下面部分中incarnate()是生成访客Cookie的。

看一下incarnate()的内容,这里就是发送了一个GET请求,然后我们可以发现就是上述红框中第四个请求

因此,我们只要能成功的提交红框中第四个请求,就可以获取到一个访客Cookie。

1.2、tid的获取


看一下第四个请求的内容:

这里我们可以发现有很多个参数,在多次从测试对比中我们可以发现其中acbfromcw是固定的,_rand是一个随机数,gc一致是为空。因此我们只需要获取到tid的值就ok了。在上述源码页面中并不存在这几个值相关的代码,因此我们需要看其引入的js文件中是否存在,也就是红框中第二个请求。

可以发现,这里发送的请求就是上述红中的第三个请求,POST了两个参数,一个是cp,定值为:gen_callback;另一个是fp,他是通过getFp()方法生成,其大致是获取浏览器类型,窗口大小,字体之类的常量。因此这两个值我们都可以认为是个定值,在测试时只需要直接复制就OK了。

然后我们模拟提交一下这个请求,发现可以返回tid:

至此我们已经成功获取到了第一个关键的参数——tid

1.3、Cookie的获取


然后就是发出我们最终的请求了,也就是红框中的第四个请求。注意:发送该请求时,我们需要加入一个Cookie: tid: tid__095

代码如图:

运行结果:

成功获取到了两个Cookie值:SUB和SUBP。

注意,这里有个缺陷,即我们并不能保证每次都可以获取到SUB和SUBP两个值。有时是获取不到的,获取失败时只需要重新获取就可以。

2、测试


我们在Cookie中加入这两个值进行测试,发现可以绕过Sina Visitor System,直接访问页面。

正常访问时的页面加载流程:

加入Cookie时页面加载流程:

可以看到,第一次需要经过Sina Visitor System加载,第二次页面直接加载,成功绕过Sina Visitor System。

3、简易代码


下面是一个简单的实现代码

# -*- coding:utf-8 -*-
# Author: Suummmmer
# Date: 2019-05-17

import requests
import random

headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, "
"like Gecko) Chrome/69.0.3497.100 Safari/537.36",
}

def get_tid():
"""
获取tid,c,w
:return:tid
"""
tid_url = "https://passport.weibo.com/visitor/genvisitor"
data = {
"cb": "gen_callback",
"fp": {
"os": "3",
"browser": "Chrome69,0,3497,100",
"fonts": "undefined",
"screenInfo": "1920*1080*24",
"plugins": "Portable Document Format::internal-pdf-viewer::Chrome PDF Plugin|::mhjfbmdgcfjbbpaeojofohoefgiehjai::Chrome PDF Viewer|::internal-nacl-plugin::Native Client"
}
}
req = requests.post(url=tid_url, data=data, headers=headers)

if req.status_code == 200:
ret = eval(req.text.replace("window.gen_callback && gen_callback(", "").replace(");", "").replace("true", "1"))
return ret.get('data').get('tid')
return None


def get_cookie():
"""
获取完整的cookie
:return: cookie
"""
tid = get_tid()
if not tid:
return None

cookies = {
"tid": tid + "__095" # + tid_c_w[1]
}
url = "https://passport.weibo.com/visitor/visitor?a=incarnate&t={tid}"
"&w=2&c=095&gc=&cb=cross_domain&from=weibo&_rand={rand}"
req = requests.get(url.format(tid=tid, rand=random.random()),
cookies=cookies, headers=headers)
if req.status_code != 200:
return None

ret = eval(req.text.replace("window.cross_domain && cross_domain(", "").replace(");", "").replace("null", "1"))

try:
sub = ret['data']['sub']
if sub == 1:
return None
subp = ret['data']['subp']
except KeyError:
return None
return sub, subp

4、参考链接

https://blog.csdn.net/qq_41057280/article/details/81201337

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Polyhedron主题:一款简洁大方的双栏自适应Typecho主题

    首先,你需要启动Links插件才能保证主题正常运行。 由于原插件存在一定问题,我将修改后的版本置于下载区。

    赵帆同学GXUZF.COM
  • Typecho用模板和插件完美还原Wordpress功能

    本站使用的模板是简洁风initial,本来为了与主页适配是要自己扒模板的,但是意外发现有人已经做过了,叫AttentionX,两款模板下载链接均附在下方。 T...

    赵帆同学GXUZF.COM
  • 删除WordPress默认“未分类”

    刚安装完的WordPress会自动在后台建一个“未分类”的默认分类目录,可以修改名称但不能删除,刚接触WordPress的新手,会认为这是默认分类不允许删除,其...

    赵帆同学GXUZF.COM
  • Linux之sed命令详解

    语法 sed [-hnV][-e<script>][-f<script文件>][文本文件]

    AsiaYe
  • 想开发孩子的智力?请考虑这款呆萌的可编程学习机器人

    Marty是一个带有WiFi功能的可编程行走机器人,它的零部件可以通过3D打印进行定制。尽管设计得简单易用,非常适合初学者,但一点也不影响Marty用来做一些很...

    机器人网
  • TensorFLow基础:使用TensorBoard进行可视化学习

    TensorFlow涉及到的运算,往往是在训练庞大的神经网络过程中出现的复杂且难以理解的运算,为了方便对程序进行理解、调试和优化,tensorflow提供...

    Steve Wang
  • 通用权限的思路。只是一个简单的思路。

    面对权限,我们要解决几个的问题。 第一个就是:我们的软件里面有哪些功能? —— 给用户自己维护角色作准备 比如添加新闻、添加产品、客户信息维护、合同管理等等...

    用户1174620
  • gssproxy.service start operation timed out. Terminating.

    由于特殊需求需要添加modprobe.blacklist=mpt3sas kernel 参数,在添加完参数重启后,特定配置机型报如下message错误。mess...

    PedroQin
  • 不确定性猛增的 2020,海康威视回答了 36 个问题

    全球经济下行、业内需求不足、实体清单,2019年的经济环境并不明朗。在此背景下海康威视依旧成绩斐然,营业总收入576.58亿元,比上年同期增长15.69%。

    AI掘金志
  • 美国海军利用虚拟现实招募新兵

    美国海军具备一种招募新兵的新工具——虚拟现实视频游戏。 据《今日读物》报道,在2017年国殇日当周周末,美国海军在纽约州长岛展示了最新的招募技术——一辆装着八个...

    人工智能快报

扫码关注云+社区

领取腾讯云代金券