爬虫实验笔记

2023-11-12

        这里的爬虫实验害暂时没有遇到验证码等问题,步骤可以简单概括为:

1.找到爬虫必要的信息;

2.内容提取;

3.将提取到的内容保存至xlsx文件

1.找到爬虫必要的信息

        以zh为例,首先找一个自己感兴趣的贴,进入开发者模式,刷新,网络抓包:

        这个时候会看到一个feeds?的包,这就是页面的feeds接口,所有的回复都可以在这里看到

        点开它,可以在里面看到关于评论的所有信息,例如target下的content储存了评论,tarfer下的author下的name储存了层主的名字。

        当然,最重要的部分在于消息头:

         在消息头中找到accept-language、origin、referer、user-agent,这样才能够让机器人访问网页。

2.内容提取

        找到以上信息后,就开始写代码了:

        首先是请求头:

headers = {
    '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',
    'origin': 'https://www.zhihu.com',
    'referer': 'https://www.zhihu.com/question/20744784',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0'
}

        然后是页面的feeds接口:

start_url='https://www.zhihu.com/api/v4/questions/20744784/feeds?include=data%5B*%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cattachment%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Cis_labeled%2Cpaid_info%2Cpaid_info_content%2Creaction_instruction%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cis_recognized%3Bdata%5B*%5D.mark_infos%5B*%5D.url%3Bdata%5B*%5D.author.follower_count%2Cvip_info%2Cbadge%5B*%5D.topics%3Bdata%5B*%5D.settings.table_of_content.enabled&offset=&limit=3&order=default&platform=desktop'

        然后进行内容的提取,但是要注意检测IP是否被限制,如果爬不到数据就说明可能被限制了。

response = requests.get(url, headers=headers)  # response即请求的反馈
    print(response)
    # 可以通过print输出response,若输出200则发送请求成功
    c = response.json() # 获取页面内容中的json数据
    # 判断data是否在获取的json数据中
    if "data" not in c:
        print("获取数据失败,本IP可能已被限制")
        break

    # 没有退出循环 说明data在c中
    datas = c.get('data')

        这一步提取到的是页面内容的所有json数据,要从中提取需要的数据,也就是第一部中找到的喜欢的标签下的内容。但是,因为正如第一步体现的,content中的数据并不全是text,所以需要使用PyQuery库,剔除HTML标签后提取回答内容中的文本。

  for d in datas:
        user = d.get("target").get("author").get("name")  # 回答者用户名
        print("用户名:" + user)
        users.append(user)  # 将用户名添加至自定义用户名列表

        answer = pq(d.get("target").get("content")).text()

        print("回答:"+answer)                       # 与用户名同理,输出所获取的内容文本
        answers.append(answer)                       # 将用户名添加至自定义用户名列表

        vote = d.get("target").get("voteup_count")                             # 赞同数
        print("赞同数:"+str(vote))                       # 同理,注意将vote转化成字符串
        votes.append(vote)                       # 将支持数添加至自定义支持数

        获取下一个链接,添加在自定义链接列表中,进行下一次循环:

next_url.append(c["paging"]["next"])  # 将next所指向的回答导入next_url中
    # 当不存在下一个链接时跳出循环
    if c["paging"]["is_end"]:
        break

3.内容存储

        这一步使用的是xlsxwriter库

filename = 'zhihu.xlsx'  # 要保存的文件名
    fileW = xlsxwriter.Workbook(filename)  # 写入filename
    tableWrite = fileW.add_worksheet('sheet1')  # 向这个文件增加表单sheet1
    # 把第一行的三个列名插入进去
    tableWrite.write(0, 0, '用户名')  # 第1行第1列
    tableWrite.write(0, 1,'内容')                          # 第1行第2列
    tableWrite.write(0, 2,'赞同数')                           # 第1行第3列
    # 遍历要合并的评论集,从第二行开始依次插入数据,i从0开始
    for i in range(len(users)):
        tableWrite.write(i + 1, 0, users[i])  # 第i+2行第1列
        tableWrite.write(i + 1, 1, answers[i])                             # 第i+2行第2列
        tableWrite.write(i + 1, 2, votes[i])                             # 第i+2行第3列
    fileW.close()

4.运行结果

        当然是成功获取到想要的数据拉

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

爬虫实验笔记 的相关文章

随机推荐

  • 【软路由】旁路由使用配置教程

    软路由 旁路由使用配置教程 简介 旁路由好处 旁路由配置步骤 1 修改管理地址网段 2 关闭IPV6和DHCP服务 3 防火墙设置 关于IP动态伪装 4 终端设置 简介 我们都知道 软路由一般有两种使用方式 一种是作为承担DHCP分配的主路
  • 【JavaScript高级程序设计】重点-第五章笔记:Date、RegExp、原始值包装类、单例内置对象

    文章目录 基本引用类型 1 Date 1 1 继承的方法 1 2 日期格式化方法 1 3 日期 时间组件方法 2 RegExp正则表达式 2 1 RegExp 实例属性 2 2 RegExp 实例方法 2 3 RegExp 构造函数属性 3
  • 【Dev-C++】的dos控制台窗口大小设置

    可以使用system 接口直接修改 例 include
  • Spring 集成OpenOffice

    第一步 openoffice jar包依赖
  • 安卓scale动画fromDegrees toDegrees解释

    注意以下实验都是相对于自己 0 0f 上 1 0f 下 如果想了解安卓scale动画pivotX 请点击这里 在安卓中 fromDegrees是开始的角度 toDegrees是介绍的角度 其中X轴右面是0度 如果toDegrees比from
  • 【JS组件篇】使用拖拽组件 react-beautiful-dnd 实现工作台自定义布局功能

    项目要求 制作工作台页面 模块可根据后端配置动态展示 各模块可根据个人喜好进行拖拽布局 并保存 大致效果如下 大致实现步骤 整体布局 首先需要对设计稿进行分析 大致分为左右两部分 可根据后端配置动态展示左右两模块的展示内容 各模块相对独立
  • C++内存管理(2)new、delete详解

    目录 new operator new操作 new类对象时加不加括号的差别 new工作任务 delete工作任务 new和delete 堆区空间操作 对比malloc和free new和delete操作基本类型的空间 new和delete操
  • Direct3D纹理映射

    借助纹理映射技术 我们可将图像数据映射到三角形单元中 这种功能可以显著地增加所绘制场景的细节和真实感 例如创建一个立方体然后为其每个面映射一个板条纹理 从而将该立方体变为一个板条箱 在Direct3D中纹理用接口IDirect3DTextu
  • python判断工作日,节假日

    python判断工作日 节假日 模块 chinesecalendar 爬虫式的方法 模块 pandas 实例 模块 chinesecalendar 针对中国的节假日 强烈推荐 https pypi org project chineseca
  • 王道考研计算机网络第二章--物理层

    目录 2 1通信基础 2 1 1物理层基本概念 1物理层基本概念 2 1 2数据通信基础知识 1典型的数据通信模型 2数据通信相关术语 3三种通信方式 4两种数据传输方式 2 1 3码元 波特 速率 带宽 1码元 2速率 波特 带宽 2 1
  • 被入侵了怎么办?暴力破解被篡改了数据,该怎么处理?主机安全不容忽视

    主机安全关系着整个服务器数据的一个安全性 那么主机安全具体指什么呢 指保证主机在数据存储和处理的保密性 完整性 可用性 它包括硬件 固件 系统软件的自身安全 以及一系列附加的安全技术和安全管理措施 从而建立一个完整的主机安全保护环境 我们进
  • Kubernetes: K8S 容器集群管理系统

    虚拟机 gt 容器技术 传统部署 直接将应用程序部署在物理机上 虚拟机 vmware openstack 可以在操作系统中模拟出多台子电脑 Linux 子电脑之间是相互隔离的 独立 但是虚拟机存在启动慢 占用空间大 不易迁移的缺点 容器化技
  • openCV与freetype解决图片叠OSD的问题

    一 移植OPENCV3 4 1库 opencv 3 4 1 tar gz 功能 实现对图片的处理 移植文档见 正点原子 I MX6U 移植 OpenCV V1 3 注意版本 注意 安装交叉编译工具 注意 这里不能使用 NXP yocto 所
  • Oracle 12 创建数据库

    安装完oracle数据库软件后 就可以创建oracle数据库了 具体步骤如下 1 打开命令行 输入命令 dbca 通过它 我们可以对数据库进行管理 2 之后便会显示如下图所示的界面 点击下一步 3 进入配置数据库的界面 需要注意的是 a 全
  • ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统

    资产灯塔 不仅仅是域名收集 https github com TophantTechnology ARL 简介 旨在快速侦察与目标关联的互联网资产 构建基础资产信息库 协助甲方安全团队或者渗透测试人员有效侦察和检索资产 发现存在的薄弱点和攻
  • Notepad++查看hex文件

    一 打开插件 插件管理 二 找一下有没有一个hex开头的插件 有的话就安装它 然后重启软件 三 装完之后 插件里面就会出现下面这个东西 下面那张图百度上找的 我的里面找不到这个插件 四 如果找不到的话上github下一个 https git
  • 【Python网络爬虫与信息提取】Request+BeautifulSoup

    1 Request库 import requests r requests get https www baidu com print r status code print type r print r headers print r e
  • 使用R语言进行单因素方差分析(ANOVA)是一种常用的统计方法,它用于比较多个样本的均值是否存在显著差异

    使用R语言进行单因素方差分析 ANOVA 是一种常用的统计方法 它用于比较多个样本的均值是否存在显著差异 在R语言中 可以使用aov 函数来执行单因素方差分析 本文将详细介绍如何使用aov 函数进行单因素方差分析 并提供相应的源代码示例 假
  • Linux操作系统之mysql数据库简介

    文章目录 数据库的介绍 有关数据库的操作 有关数据表的操作 C语言访问mysql 事务 视图 索引 数据库的介绍 mysql数据库模型 关系型数据库与非关系型数据库 关系型数据库 指采用了关系模型来组织数据的数据库 关系模型就是指二维表格模
  • 爬虫实验笔记

    这里的爬虫实验害暂时没有遇到验证码等问题 步骤可以简单概括为 1 找到爬虫必要的信息 2 内容提取 3 将提取到的内容保存至xlsx文件 1 找到爬虫必要的信息 以zh为例 首先找一个自己感兴趣的贴 进入开发者模式 刷新 网络抓包 这个时候