Python爬取微博热搜页面

  • 前期准备
  • 分析
  • 代码
  • 吐槽

此篇文章未实现模拟登陆,需要登录绕行。。。。。

前期准备

fiddler 抓包工具
Python3.6
谷歌浏览器

分析

1.清理浏览器缓存cookie以至于看到整个请求过程,因为Python代码开始请求的时候不带任何缓存。
2.不考虑过多的header参数,先请求一次,看看返回结果

图中第一个链接是无缓存cookie直接访问的,状态码为302进行了重定向,用返回值.url会得到该url后面会用到(headers里的Referer参数值)
2 ,3 链接没有用太大用处为第 4 个链接做铺垫但是都可以用固定参数可以不用访问

cb 和fp参数都是前两个链接确定出来的参数(js文件采集的设备信息)
第四个链接会返回一个数据字典(里面有tid,为第五次访问做铺垫)

访问https://passport.weibo.com/visitor/genvisitor ,cookie为tid=__095,注意tid需要去掉转义字符‘\’,get传的参数有用的只有t也就是tid 其他都是固定值 、_rand是浮点随机数没啥具体的意义可以用Python的random.random()函数,需要导入random库,get传参使用params=,post传参用data=,不是随便都能用的

得到返回值 含有SUB 和SUBP参数的值
正好是访问最后一个链接也就是热搜榜需要的cookie的值
到此分析结束

代码

实现不一,代码风格有点乱未整理,别杠。

import requests
import random
import re
import urllib3
#警告忽略
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
class Wb():def __init__(self):#利用session保持回话self.session=requests.Session()#清理headers字典,不然update好像不会起作用self.session.headers.clear()self.header={"Host": "weibo.com","Connection": "keep-alive","Upgrade-Insecure-Requests": "1","User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) ""AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/86.0.4240.198 Safari/537.36","Accept": "text/html,application/xhtml+xml,application/xml;""q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,""application/signed-exchange;v=b3;q=0.9","Sec-Fetch-Site": "cross-site","Sec-Fetch-Mode": "navigate","Sec-Fetch-Dest": "document","Accept-Encoding": "gzip, deflate, br","Accept-Language": "zh-CN,zh;q=0.9",}#设置代理如果需要fiddler抓包分析代码提交的参数使用下面代理如果不使用选择下面的代码self.fiddler_proxies=Noneself.fiddler_proxies = {'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'}# self.fiddler_proxies=Nonedef get_top_summary(self):#更新添加header   headers.update只会覆盖相同键值的值不会覆盖全部self.session.headers.update(self.header)#verify=False 不检查证书response=self.session.get(url="https://weibo.com/",proxies=self.fiddler_proxies,verify=False)print(response.url)response.encoding='gbk'data1={"cb":"gen_callback","fp":'{"os":"1","browser":"Chrome86,0,4240,198",''"fonts":"undefined","screenInfo":"1920*1080*24",''"plugins":"Portable Document Format::internal-pdf-viewer::''Chromium PDF Plugin|::mhjfbmdgcfjbbpaeojofohoefgiehjai::''Chromium PDF Viewer|::internal-nacl-plugin::Native Client"}'}header1={"Host": "passport.weibo.com","Cache-Control": "max-age=0","If-Modified-Since": "0","Content-Type": "application/x-www-form-urlencoded","Accept": "*/*","Origin": "https://passport.weibo.com","Sec-Fetch-Site": "same-origin","Sec-Fetch-Mode": "cors","Sec-Fetch-Dest": "empty","Referer": response.url,}self.session.headers.update(header1)response1=self.session.post(url="https://passport.weibo.com/visitor/genvisitor",data=data1,proxies=self.fiddler_proxies,verify=False)#利用正则表达式解析tid参数的值t=re.search('{"tid":"(.*)","new_tid"',response1.text).groups()[0]data2={"a":"incarnate","t":t.replace("\\",""),"w": "2","c": "095","gc":"","cb":"cross_domain","from":"weibo","_rand":random.random()}header2={"Sec-Fetch-Mode": "no-cors","Sec-Fetch-Dest": "script","Cookie":"tid="+t.replace("\\","")+"__095"}self.session.headers.update(header2)response2 = self.session.get(url="https://passport.weibo.com/visitor/visitor",params=data2,proxies=self.fiddler_proxies,verify=False)#从返回值中获取cookie字典cookie = requests.utils.dict_from_cookiejar(response2.cookies)header3={"Cookie":"SUB="+cookie["SUB"]+";"+"SUBP="+cookie["SUBP"],"Host": "s.weibo.com","Upgrade-Insecure-Requests": "1"}self.session.headers.update(header3)response3=self.session.get(url="https://s.weibo.com/top/summary",proxies=self.fiddler_proxies,verify=False)# print(response3.text)if __name__ == '__main__':wb=Wb()wb.get_top_summary()

想要直接用代码请看代码解释
至此只能得到原始的html页面,想要进一步操作需要在HTML里面提取有用的数据。。。。。。
爬虫初期需要更多的是耐心。。。。。。
有误之处请提出

吐槽

网上太多原创是ctrl C V 真是CV哔神

Python 爬取微博热搜页面相关推荐

  1. python爬取微博热搜榜

    python爬取微博热搜榜 最近应我大学室友得需求,做了一个简单的爬虫案例,先给大家看一下程序运行效果 接下来就是贴出代码了,在这里我会做一些简单说明,对如刚入门的同学可能会有所帮助,这里使用的是py ...

  2. python爬取微博热搜数据并保存!

    主要用到requests和bf4两个库将获得的信息保存在d://hotsearch.txt下importrequests;importbs4mylist=[]r=requests.get(ur- 很多 ...

  3. python爬取微博热搜写入数据库_python实现爬取微博热搜存入Mysql

    python爬取微博热搜存入Mysql最终的效果 使用的库 目标分析 一:得到数据 二:链接数据库 总代码 最终的效果 废话不多少,直接上图 这里可以清楚的看到,数据库里包含了日期,内容,和网站lin ...

  4. python爬取微博热搜榜教程,python爬取微博热搜并存入表格

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 url= https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&am ...

  5. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...

    一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...

  6. python爬取微博热搜并存入表格_python爬虫进阶之爬取微博热搜存入Mysql

    在编程中,我们如果想要把数据转入数据库中,首先会选择 MySQL数据库.因为MySQL数据库体积小.速度快.总体拥有成本低.开放源代码,其有着广泛的应用,例如我们使用python爬虫微博热搜,就可以使 ...

  7. Python爬取微博热搜榜,将数据存入数据库

    一直想学习用Python来进行数据的爬取,也一直想知道Python连接数据库的操作,今天刚好看到的这篇文章满足了这两个条件,我试着爬了下微博,并成功将数据添加到数据库中,颇为欢喜.作者写的很简单,有些 ...

  8. Python爬取微博热搜数据之炫酷可视化

    可视化展示 看完记得点个赞哟 微博炫酷可视化音乐组合版来了! 项目介绍 背景 现阶段,微博.抖音.快手.哗哩哗哩.微信公众号已经成为不少年轻人必备的"生活神器".在21世纪的今天, ...

  9. Python爬取微博热搜并定时发送邮件,及时了解最新动态!

    一.前言 微博热搜榜每天都会更新一些新鲜事,但是自己处于各种原因,肯定不能时刻关注着微博,为了与时代接轨,接受最新资讯,就寻思着用Python写个定时爬取微博热搜的并且发送QQ邮件的程序,这样每天可以 ...

  10. 利用python爬取微博热搜并进行数据分析

    爬取微博热搜 import schedule import pandas as pd from datetime import datetime import requests from bs4 im ...

最新文章

  1. easyui-datagrid行数据field原样输出html标签
  2. PXE BOOT DIY自己的网络启动工具集合
  3. 基于深度学习的步态识别算法的MATLAB仿真
  4. 1.12 实例:猜数字小游戏
  5. 宁波php吧,2020年9月程序员工资统计,平均14469元
  6. [zz]grep 命令的使用
  7. 让人期待的Visual Studio 2010
  8. android 自定义控件
  9. 前端学习(1405):多人管理25node.js—安装bcrypt出现错误的解决办法
  10. 八大排序:Java实现八大排序及算法复杂度分析
  11. [转载] Java序列化的几种方式以及序列化的作用
  12. android 跑分,2018年10月国内Android手机安兔兔跑分性能排行榜
  13. linux 系统忘记数据库root密码
  14. 比Excel还简单,跳槽数据分析岗必会的工具
  15. python狗屁不通文章生成器_狗屁不通文章生成器,GitHub火爆的万字啰嗦文章瞬间生成...
  16. SQL:postgresql中,将geometry转换为geojson数据
  17. vasp 模拟退火_vasp的分子动力学模拟
  18. 2、数码相框之显示文字
  19. 北京邮电大学计算机考研资料汇总
  20. 第八章:贪心+二分 题目::Aggressive cows

热门文章

  1. 迅捷校园网自动登录脚本(网页端)
  2. 【基金量化研究系列】大类资产配置研究(六)——多资产风险平价策略
  3. 帐号登录:oAuth2.0流程
  4. python桌面整理小助手
  5. WPF+VB.net制作桌面股票小助手
  6. 分布式渲染运行时3D引擎架构在Web端的应用: 秒开3D Web APP
  7. 树莓派(zero w)——硬件介绍与系统开机
  8. 经验分布函数(Empirical Distribution Functions)
  9. 如何免费制作微信小程序?详细步骤
  10. 微信公众号模板消息配置和发送