Python爬虫(入门+进阶)学习笔记 1-6 浏览器抓包及headers设置(案例一:爬取知乎)

2023-11-09

爬虫的一般思路:

  • 抓取网页、分析请求
  • 解析网页、寻找数据
  • 储存数据、多页处理 

  • 本节课主要讲授如何通过谷歌浏览器开发者工具分析真实请求的方法。

寻找真实请求的三个步骤

  • 分析:使用谷歌浏览器开发者工具分析网页的请求
  • 测试:测试URL请求中每个参数的作用,找出控制翻页等功能的参数

  • 重复:多次重复寻找符合爬虫需要的真实请求

实战环节:爬取知乎

通过爬取知乎“轮子哥”——vczh关注的人分析Ajax或者JavaScript加载的数据的真实请求并展示这种爬取方法的具体过程。

1. 寻找真实请求的测试

  • 首先,进入“轮子哥——vczh”关注的人的页面(注意:需要先登录个人知乎账号
  • 通过禁止JavaScript加载的方法发现页面不能正常加载,确认该页面的翻页是通过JavaScript加载数据实现的
  • 使用谷歌浏览器开发者工具寻找包含关注人信息的真实请求,可以发现真实请求是以“followees”开头的请求,其返回一个JSON格式的数据,该数据对应下一页的“他关注的人”: 
  • 双击这个请求,返回一个JSON格式的数据,可以通过安装JSONView插件在浏览器中更好地显示该数据
  • 接下来便可以尝试爬取该请求的数据

2. 尝试爬取真实请求的数据

    首先使用前几节课所学requests.get()尝试爬取数据

    可以发现返回了“500 Server Error”,即由于网站反爬虫的原因,服务器返回了“500服务错误”

    该问题可以通过添加hearders请求头信息解决

3. 添加hearders请求头信息模拟浏览器访问

    请求头信息承载了关于客户端浏览器、请求页面、服务器等相关的信息,用来告知服务器发起请求的客户端的具体信息

    知乎的反爬虫机制是通过核对请求头信息实现的,所以需要在使用requests请求数据的时候加上所需的请求头

    对比知乎的请求头信息和常见的请求头信息,发现知乎请求头多了authorization和X-UDID的信息

        

    在爬虫程序中添加请求头信息,即添加headers

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

import requests

headers = {
   'authorization':' ', #括号中填上你的authorization
   'User-Agent':' ', #括号中填上你的User-Agent
}
url = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=20&limit=20'
response= requests.get(url, headers = headers).json()

print(response) 


最终代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 20 16:01:47 2018

@author: Jackie
"""

import requests
import pandas as pd
import time

headers = {
        'authorization':'Bearer 2|1:0|10:1519627538|4:z_c0|92:Mi4xYzBvWkFBQUFBQUFBSU1JaTVqRU1EQ1lBQUFCZ0FsVk5FdnVBV3dEdHdaRmtBR1lmZEpqT3VvdmtpSm5QMWtkZ1ZB|787597598f41757929f46f687f78434dbc66d6abc980e40fb50b55cd09062b07',
        'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
        'x-udid':'ACDCIuYxDAyPTg7eVnDe8ytVGX6ivGdKZ9E=',
        }


user_data = []

def get_user_data(page):
    
    for i in range(page):
        url = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset={}&limit=20'.format(i*20)
        response = requests.get(url, headers = headers).json()['data']
        user_data.extend(response)
        print('正在爬取第%s页' %str(i+1))
        time.sleep(1)
    
    
if __name__ == '__main__':
    get_user_data(3)
    df = pd.DataFrame(user_data)
    df.to_csv('users.csv')

补充知识

1. JSON

  • JSON是一个轻量级的数据交换格式,连接API进行数据爬取的时候,数据的一般返回格式为JSON。
  • JSONView插件:前往Chrome JSONView插件安装,下载并安装JSONView插件,使JSON格式的数据在谷歌浏览器中更好地呈现

2. HTTP请求



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬虫(入门+进阶)学习笔记 1-6 浏览器抓包及headers设置(案例一:爬取知乎) 的相关文章

随机推荐

  • 斜率优化

    如果转移方程中含有 既有i 的项又有j的项 往往可以考虑斜率优化 斜率优化的目标是将dp式转化为 y kx b 这种形式 P3195 HNOI2008 玩具装箱TOY 题意 有1 n个玩具需要打包 每个玩具的有其长度 可以一段区间一段区间地
  • 珍藏多年的各类资源网站分享给大家

    学习网站 素材巷 这个应该有少数人知道吧 是我近几年来第一次遇到这样的网站 一个专注于分享文字素材的分享平台 涵盖文学范围广 包含散文 小说 诗词 戏曲 科普 天文 地志 阴阳 医卜 僧道 技艺 高考作文等 网址 素材巷 文字写作素材分享平
  • Unity3d接入googleplay内购详细说明(二)

    因为本文内容比较多 整理花费时间比较长 故分几篇完成 以下为本文目录结构 方便查阅 Unity3d接入googleplay内购详细说明 一 引言 一 准备条件 二 谷歌开发者后台应用创建说明 Unity3d接入googleplay内购详细说
  • 《Python进阶系列》二:Python中的 for-else 语法

    for else 语法 你是否见过这个语法 for i in xxx pass else pass 是不是一脸懵逼 啊哈哈哈 事实上 在 Python 中 else不仅可以与 if搭配使用 还可以与 for结合 想不到吧 我们先来看一个例子
  • 结合ruoyi-cloud和ruoyi-app实现微信小程序的授权登录

    文章目录 1 前言 1 1 环境准备 1 2 登录流程图 2 小程序代码 2 1 RuoYi App编辑api login js 2 4 新增按钮微信授权登录 2 6 新增wxHandleLogin方法获取code 2 9 创建sendWx
  • 重置计算机的本地策略,Win10怎样重置组策略/安全策略

    很多windows10系统用户都会使用注册表或组策略来深度调试系统 这些系统自带工具虽然能够实现一些表面上没有的功能 但也可能会让我们 翻车 对于注册表来说 修改之前做好备份是硬道理 恢复起来也很方便 但对于组策略和安全策略 要如何才能恢复
  • wxPython 菜单栏 工具栏 状态栏

    coding utf 8 Created on Mon Jun 10 03 56 09 2019 QQ群 476842922 欢迎加群讨论学习 author Administrator coding utf 8 import wx impo
  • RN_iOS项目部署流程实例

    文章目录 1 环境配置 1 1 安装node 1 2 安装Watchman 1 3 安装npm 1 4 安装cocoapods 2 百家云demo下载 3 运行百家云demo 3 1 顺利的话 3 2 踩过的坑 按这个目录流程走 3 2 1
  • 如何使用Flask包构建网页

    最近接到的任务是用Flask构建简单的算法成果展示网页 所以才来研究如何用flask构建网页 因为要求展示 对前端页面的美化不做要求 所以这篇博客的重点在于页面之间的跳转及前后端的数据传输 1 Flask运行HTML代码 默认情况下 Fla
  • C语言例题总结一

    目录 一 两数交换的多种方法 二 比较两数大小的多种方法 三 在重复的数字中找出不同的数字 1 在重复的数字中找出一个不同的数字 2 在重复的数字中找出两个不同的数字 一 两数交换的多种方法 第一种 引入第三方变量 利用了指针将地址传进去
  • solidworks大型装配体慢卡顿怎么办?来看专业的装配设计与仿真工作站是怎么解决的!

    相信很多CAD专业领域的设计工程师都或多或少的遇到慢 卡 顿的情况 按照网上各种设置一通问题依旧 换成昂贵的双路品牌图形工作站依然得不到改善 那么问题到底出在哪儿 下面就依Solidworks为例 从三维设计与仿真的特点来分析软件如何与硬件
  • IEEE Transactions的模板中,出现subfig包和fontenc包冲突的问题,怎么解决?

    IEEE Transactions的模板中 出现subfig包和fontenc包冲突的问题 怎么解决 本文章记录如何在IEEE Transactions的模板中 出现了subfig包和fontenc包冲突的问题 该怎么解决 目录 IEEE
  • 【C#排序算法】(三)希尔排序

    希尔排序 核心 定义增量序列 不断递减增量至1 做插入排序 public void ShellSort int arr 增量h 等于1时最后一次排序 int h arr Length 2 while h gt 1 这里开始是简单插入排序算法
  • C# 整套视觉开发(VisionAndMotionPro)

    实例截图 文件 590m com f 25127180 488329759 5989d1 访问密码 551685 核心代码 VisionAndMotionPro sln vs VisionAndMotionPro v14 v15 Serve
  • 为了对抗内卷,我去阿里“偷了”五套最新Java学习笔记

    最近整理了阿里五套最新的笔记 分别是Java后端30大核心知识点总结 2022最近金三银四面试题总结 阿里巴巴Java开发规范手册 2022版 Spring Cloud Alibaba全解 阿里巴巴机器学习算法集合 今天分享的内容很多 老师
  • 01.03第一篇之数据生成模块

    第3 章数据生成模块 3 1 埋点数据基本格式 公共字段 基本所有安卓手机都包含的字段 业务字段 埋点上报的字段 有具体的业务类型 下面就是一个示例 表示业务字段的上传 下面就是一个示例 表示业务字段的上传 ap xxxxx 项目数据来源
  • Audio Moth代码总结

    1 HFLE的定义 HFLE是指高频时钟分频器 预分频器 High Frequency Low Energy Clock Divider Prescaler 在低功耗模式下 为了节省能量 系统需要使用低频时钟 LFCLK 来驱动一些模块 如
  • linux 线程局部存储,tls_windows

    线程局部存储 线程局部存储 thread local storage TLS 是一个使用很方便的存储线程局部数据的系统 利用TLS机制可以为进程中所有的线程关联若干个数据 各个线程通过由TLS分配的全局索引来访问与自己关联的数据 这样 每个
  • v-model绑定checkbox无法动态更新视图

    在vue2中使用v model绑定checkbox
  • Python爬虫(入门+进阶)学习笔记 1-6 浏览器抓包及headers设置(案例一:爬取知乎)

    爬虫的一般思路 抓取网页 分析请求 解析网页 寻找数据 储存数据 多页处理 本节课主要讲授如何通过谷歌浏览器开发者工具分析真实请求的方法 寻找真实请求的三个步骤 分析 使用谷歌浏览器开发者工具分析网页的请求 测试 测试URL请求中每个参数的