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=None
        self.fiddler_proxies = {'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'}
        # self.fiddler_proxies=None

    def 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里面提取有用的数据。。。。。。
爬虫初期需要更多的是耐心

到此这篇关于Python 爬取微博热搜页面的文章就介绍到这了,更多相关Python 爬取微博热搜页面内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实战之Scrapy框架爬虫爬取微博热搜

    前言:大概一年前写的,前段时间跑了下,发现还能用,就分享出来了供大家学习,代码的很多细节不太记得了,也尽力做了优化. 因为毕竟是微博,反爬技术手段还是很周全的,怎么绕过反爬的话要在这说都可以单独写几篇文章了(包括网页动态加载,ajax动态请求,token密钥等等,特别是二级评论,藏得很深,记得当时想了很久才成功拿到),直接上代码. 主要实现的功能: 0.理所应当的,绕过了各种反爬. 1.爬取全部的热搜主要内容. 2.爬取每条热搜的相关微博. 3.爬取每条相关微博的评论,评论用户的各种详细信息.

  • Python网络爬虫之爬取微博热搜

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 url= https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6 1.分析网页的源代码:右键--查看网页源代码. 从网页代码中可以获取到信息 (1)热搜的名字都在<td class="td-02">的子节点<a>里 (2)热搜的排名都在<td class=td-01 ranktop>的里(注意置顶微博是

  • Python定时爬取微博热搜示例介绍

    目录 前言 页面分析 采集代码 设置定时运行 前言 相信大家在工作无聊时,总想掏出手机,看看微博热搜在讨论什么有趣的话题,但又不方便直接打开微博浏览,今天就和大家分享一个有趣的小爬虫,定时采集微博热搜榜&热评,下面让我们来看看具体的实现方法. 页面分析 热搜页 热榜首页:https://s.weibo.com/top/summary?cate=realtimehot 热榜首页的榜单中共五十条数据,在这个页面,我们需要获取排行.热度.标题,以及详情页的链接. 我们打开页面后要先 登录,之后使用 F

  • 如何用python爬取微博热搜数据并保存

    主要用到requests和bf4两个库 将获得的信息保存在d://hotsearch.txt下 import requests; import bs4 mylist=[] r = requests.get(url='https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6',timeout=10) print(r.status_code) # 获取返回状态 r.encoding=r.apparent_encoding demo

  • Python爬虫爬取微博热搜保存为 Markdown 文件的源码

    什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. 其实通俗的讲就是通过程序去获取web页面上自己想要的数据,也就是自动抓取数据 爬虫可以做什么? 你可以爬取小姐姐的图片,爬取自己有兴趣的岛国视频,或者其他任何你想要的东西,前提是,你想要的资源必须可以通过浏览器访问的到. 爬虫的本质是什么? 上面关于爬虫可以做什么,定义了一个前提

  • python+selenium爬取微博热搜存入Mysql的实现方法

    最终的效果 废话不多少,直接上图 这里可以清楚的看到,数据库里包含了日期,内容,和网站link 下面我们来分析怎么实现 使用的库 import requests from selenium.webdriver import Chrome, ChromeOptions import time from sqlalchemy import create_engine import pandas as pd 目标分析 这是微博热搜的link:点我可以到目标网页 首先我们使用selenium对目标网页进

  • python趣味挑战之爬取天气与微博热搜并自动发给微信好友

    一.系统环境 1.python 3.8.2 2.webdriver(用于驱动edge) 3.微信电脑版 4.windows10 二.爬取中国天气网 因为中国天气网的网页是动态生成的,所以不能直接爬取到数据,需要先使用webdriver打开网页并渲染完成,然后保存网页源代码,使用beautifulsoup分析数据.爬取的数据包括实时温度.最高温度与最低温度.污染状况.风向和湿度.紫外线状况.穿衣指南八项数据. def getZZWeatherAndSendMsg(): HTML1='http://

  • Python 爬取微博热搜页面

    前期准备: fiddler 抓包工具Python3.6谷歌浏览器 分析: 1.清理浏览器缓存cookie以至于看到整个请求过程,因为Python代码开始请求的时候不带任何缓存.2.不考虑过多的header参数,先请求一次,看看返回结果 图中第一个链接是无缓存cookie直接访问的,状态码为302进行了重定向,用返回值.url会得到该url后面会用到(headers里的Referer参数值)2 ,3 链接没有用太大用处为第 4 个链接做铺垫但是都可以用固定参数可以不用访问 cb 和fp参数都是前两

  • Python 爬取微博热搜页面

    前期准备: fiddler 抓包工具Python3.6谷歌浏览器 分析: 1.清理浏览器缓存cookie以至于看到整个请求过程,因为Python代码开始请求的时候不带任何缓存.2.不考虑过多的header参数,先请求一次,看看返回结果 图中第一个链接是无缓存cookie直接访问的,状态码为302进行了重定向,用返回值.url会得到该url后面会用到(headers里的Referer参数值)2 ,3 链接没有用太大用处为第 4 个链接做铺垫但是都可以用固定参数可以不用访问 访问https://pa

  • 用Python实现爬取百度热搜信息

    目录 前言 库函数准备 数据爬取 网页爬取 数据解析 数据保存 总结 前言 何为爬虫,其实就是利用计算机模拟人对网页的操作 例如 模拟人类浏览购物网站 使用爬虫前一定要看目标网站可刑不可刑 :-) 可以在目标网站添加/robots.txt 查看网页具体信息 例如对天猫  可输入  https://brita.tmall.com/robots.txt 进行查看 User-agent 代表发送请求的对象 星号*代表任何搜索引擎 Disallow 代表不允许访问的部分 /代表从根目录开始 Allow代

  • python爬取微博评论的实例讲解

    python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手.python爬虫微博根据微博存在于不同媒介上,所爬取的难度有差异,无论是python新入手的小白,还是已经熟练掌握的程序员,可以拿来练手.本文介绍python爬取微博评论的代码实例. 一.爬虫微博 与QQ空间爬虫类似,可以爬取新浪微博用户的个人信息.微博信息.粉丝.关注和评论等. 爬虫抓取微博的速度可以达到 1300万/天 以上,具体要视网络情况. 难度程度排序:网页端>手机端>移动端.微博端就是最好

随机推荐