爬虫实战:采集知乎XXX话题数据

目录

  • 反爬虫的本意和其带来的挑战
  • 目标
  • 实战
    • 开发准备
    • 代码开发
    • 发现问题
      • 1. 发现问题[01]
      • 2. 发现问题[02]
    • 解决问题
      • 1. 解决问题[01]
      • 2. 解决问题[02]
    • 最终结果
  • 结语

反爬虫的本意和其带来的挑战

在这个数字化时代社交媒体已经成为人们表达观点的重要渠道,对企业来说,监控社交媒体上的舆情动态可以提供宝贵的数据支持以帮助优化产品和服务。对个人来说,可以通过监控分析相关话题,来了解行业趋势、扩展知识面从而更好的进行规划。然而目前的很多社交媒体都有相当完善的反爬虫机制(例如:IP封禁),虽然它的本意是为了保护自身(例如:恶意的爬虫攻击(DOS)高速频繁的请求会增加目标平台的服务器负担【503】),但是对于合法的、低频率的采集任务增加了技术难度。
下图是连续频繁的请求触发了平台的保护机制导致目标服务器拒绝访问【403】
高速频繁的请求导致目标服务器拒绝访问
GIF动图 ↓:
在这里插入图片描述

目标

  • 采集平台:知乎
  • 采集数据:新能源汽车话题
    • 标题
    • 点赞量
    • 作者
  • 使用技术手段(青果代理IP)绕过反爬虫机制
  • 将采集到的数据以文本的格式保存在txt文本中

实战

如发现有错误请指出,谢谢~

开发准备

安装python库requestsBeautifulSoup
使用终端运行

pip install requests
pip install bs4

requests: 用于发送HTTP请求
BeautifulSoup: 用于解析HTML数据

代码开发

导入第三方库到代码中

import requests
from bs4 in BeautifulSoup

先获取需要爬取的目标:

url = "https://www.zhihu.com/topic/19731651/hot"

伪装浏览器信息:

requestHeader = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"}

向目标网站发送网络请求,使用get请求:

send_request = requests.get(url,headers=requestHeader)

获取到HTML数据:

HTML_source = send_request.text
analyse_data = BeautifulSoup(HTML_source,"html.parser")

分析获取到所需数据:

fetch_data = analyse_data.findAll(attrs={"data-za-detail-view-element_name":"Title"})		# 获取标题
fetch_data_num = analyse_data.findAll("button",attrs={"class":"Button VoteButton VoteButton--up FEfUrdfMIKpQDJDqkjte"})		# 获取赞成数
fetch_data_name = analyse_data.findAll("a",attrs={"class":"UserLink-link"})		# 获取作者id

使用open函数创建本文文件为后续写入做准备:

text_data = open(r"目录:\爬取数据存放.txt","w",encoding="UTF-8")

创建三个列表为后续写入文本做准备

title_name = []
support_num = []
author_name = []

使用for循环将标题写入列表

for x in fetch_data:title_name.append(x.text.strip())

其余点赞量等类似

for y in fetch_data_num:support_num.append(y.text)
for z in fetch_data_name:author_name.append(z.text.strip())

将数据写入文本并进行一定的排版(预留一个num充当文本中的编号)

num = 0
for data,data_1,data_2 in zip(title_name,support_num,author_name):num+=1text_data.write("数量:"+ str(num) + "\n")text_data.write("标题:" + str(data) + "\n")text_data.write("点赞量:" + data_1 + "\n")text_data.write("博主名:" + data_2 + "\n" + "--"*20 + "\n")

发现问题

1. 发现问题[01]

目前一路写到这看似没有问题,但是实际运行时就能发现,“博主id”列表输出时有空字符串。如下为输出结果

['', '玩车有料', '', '大树', '', '赫尔辛根默斯肯', '', '小权兄弟', '', '产品张小能', '', 'JackyQ', '', '玩车情报局', '', '毅种循环', '', '徐里里', '', '瞻云', '', '叶子豪', '', '太阳城索拉利斯', '', '子乾', '', '南部之星', '', '徐里里', '', '灵活就业engineer', '', '电动姬', '', '人类道德洼地']

2. 发现问题[02]

在运行时有很大概率出现【403】这不仅仅时IP问题。返回的HTML状态码和源码

<Response [403]><!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"/></head><body><div style="color:#535861;opacity: 0.1;display: flex;justify-content: center;">知乎,让每一次点击都å满意义 —— 欢迎来到知乎,发现问题背后的世界。</div><script crossorigin="" data-assets-tracker-config='{"appName":"zse_ck","trackJSRuntimeError":true}' src="https://static.zhihu.com/zse-ck/v3.6.js"></script></body></html>

解决问题

1. 解决问题[01]

这个问题好解决只要清除空字符串数据就行。导致的原因是HTML中有两份一样的"class":"UserLink-link"
在这里插入图片描述

2. 解决问题[02]

导致运行时可能出现【403】的两种可能(目前我发现的)

  • 没有cookie(GIF动图示例)
    • 在这里插入图片描述
    • 添加cookie即可
      在这里插入图片描述
  • IP被封禁
    • 这个问题就得回到目标中的“绕过反爬虫机制”了
    • 选择代理ip可以绕过反爬虫机制,确保数据的顺利抓取,这里我推荐我的老朋友——青果代理IP推荐的理由非常简单,在数据采集中可以帮我节省大量时间和精力!!!关键速度贼快!
    • 现在开始使用青果代理绕过反爬虫机制
    • 在这里插入图片描述
    • 在这里插入图片描述
    • 找到分配到的地址和密钥在这里插入图片描述
    • 在代码中配置代理池
# 代理IP隧道域名称:端口号
tunnel = "********.qg.net:*****"# 用户名密码
username = "******"
password = "********"
proxies = {"http": f"http://{username}:{password}@{tunnel}","https": f"http://{username}:{password}@{tunnel}"
}

在请求中添加代理池

send_request = requests.get(url,headers=requestHeader,proxies=proxies)

最终结果

至此采集“知乎”——“新能源汽车”的数据已经完成虽然不是很完善但也七七八八了
来看看最总输出结果吧
在这里插入图片描述

数量:1
标题:卖掉油车,换了电车,如今开了2年多,终于明白网上说的都是真的
点赞量:​赞同 5923
博主名:玩车有料
----------------------------------------
数量:2
标题:北京第一批新能源老车主换车笔记
点赞量:​赞同 766
博主名:大树
----------------------------------------
数量:3
标题:西方电动车不干了,我们咋办?
点赞量:​赞同 1182
博主名:赫尔辛根默斯肯
----------------------------------------
数量:4
标题:欧美不和我们玩了,新能源车是欧美的阴谋吗?中国如何破局?
点赞量:​赞同 1624
博主名:小权兄弟
----------------------------------------
数量:5
标题:充电桩终极测评:小充嗨跑、公牛、普诺得、倍思谁是王者?
点赞量:​赞同 1625
博主名:产品张小能
----------------------------------------
数量:6
标题:这个国庆,我整理了全网报道的2023年1-9月的232起新能源汽车起火案例数据库
点赞量:​赞同 1096
博主名:JackyQ
----------------------------------------
数量:7
标题:我的小米SU 7 Max创始版交付了,说下优缺点和使用感受
点赞量:​赞同 3196
博主名:毅种循环
----------------------------------------
数量:8
标题:丰田宣布固态电池技术获重大突破「10 分钟充满跑 1200 公里,体积重量成本将减半」,影响几何?
点赞量:​赞同 1.3 万
博主名:徐里里
----------------------------------------
数量:9
标题:如何看待领克09 EM-P 成功驱动 45 吨摩天巨轮?
点赞量:​赞同 154
博主名:瞻云
----------------------------------------
数量:10
标题:秦卖7.98万真的能盈利吗?
点赞量:​赞同 1.2 万
博主名:叶子豪
----------------------------------------
等等

源代码 ↓ ↓ ↓(请自行替换*cookie、代理IP隧道域名称、端口号、用户名、密码、目录位置 *):

import requests
from bs4 import BeautifulSoup# 伪装浏览器
requestHeader = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36","cookie":"**********"}# 代理IP隧道域名称:端口号
tunnel = "******.qg.net:****"# 用户名密码
username = "******"
password = "********"
proxies = {"http": f"http://{username}:{password}@{tunnel}","https": f"http://{username}:{password}@{tunnel}"
}# 需要爬取的url【网页】
url = "https://www.zhihu.com/topic/19731651/hot"# 发送请求
send_request = requests.get(url,headers=requestHeader,proxies=proxies)# 获取HTML源码
HTML_source = send_request.text# 分析HTML数据并获取所需数据
analyse_data = BeautifulSoup(HTML_source,"html.parser")
fetch_data = analyse_data.findAll(attrs={"data-za-detail-view-element_name":"Title"})
fetch_data_num = analyse_data.findAll("button",attrs={"class":"Button VoteButton VoteButton--up FEfUrdfMIKpQDJDqkjte"})
fetch_data_name = analyse_data.findAll("a",attrs={"class":"UserLink-link"})text_data = open(r"目录:\爬取的数据.txt","w",encoding="UTF-8")
title_name = []
support_num = []
author_name = []for x in fetch_data:title_name.append(x.text.strip())
for y in fetch_data_num:support_num.append(y.text)
for z in fetch_data_name:author_name.append(z.text.strip())while '' in author_name:author_name.remove('')num = 0
for data,data_1,data_2 in zip(title_name,support_num,author_name):num+=1text_data.write("数量:"+ str(num) + "\n")text_data.write("标题:" + str(data) + "\n")text_data.write("点赞量:" + data_1 + "\n")text_data.write("博主名:" + data_2 + "\n" + "--"*20 + "\n")

结语

在数字化社交媒体时代,舆情监控已成为获取行业动态和用户反馈的重要渠道。然而面对着反爬虫机制的挑战,代理ip可以帮助我们有效、高效地解决反爬虫问题。在实际操作中使用青果网络代理IP服务是非常顺利且高效的,它提供了稳定的连接和高速的响应,确保了数据采集的连续性,还提供了强大的API接口,方便用户进行批量管理和调度代理IP,进一步提升了数据采集的效率和灵活性。
而且青果网络为能给广大用户先行体验代理ip的使用效果,提供了6小时免费试用活动
在这里插入图片描述

感兴趣、有需求的可以点这里进行试用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序2-地图显示和地图标记

一、index修改页面&#xff0c;让页面能够显示地图和一个添加标记的按钮。 index.wxml <scroll-view class"scrollarea" scroll-y type"list"><view class"index_container"><map id"map" style"width: 100%; h…

Qt入门1——认识Qt的几个常用头文件和常用函数

1.头文件 ① #include <QPushButton>——“按钮”头文件&#xff1b; ② #include <QLabel>——“标签”头文件&#xff1b; ③ #include <QFont>——“字体”头文件&#xff1b; ④#include <QDebug>——输出相关信息&#xff1b; 2. 常用函数/类的基…

社交电商专业赋能高校教育与产业协同发展:定制开发AI智能名片及2+1链动商城小程序的创新驱动

摘要&#xff1a;本文围绕社交电商有望成为高校常态专业这一趋势展开深入探讨&#xff0c;剖析国家政策认可下其学科发展前景&#xff0c;着重阐述在专业建设进程中面临的师资短缺及实践教学难题。通过引入定制开发AI智能名片与21链动商城小程序&#xff0c;探究如何借助这些新…

CPU命名那些事

一、Intel CPU命名 1. 命名结构 Intel CPU 的命名通常包含以下几个部分&#xff1a; 品牌 产品线 系列 代数 具体型号 后缀 例如&#xff1a;Intel Core i7-13700K 2. 各部分含义 品牌 Intel&#xff1a;表示厂商&#xff08;几乎所有命名中都有&#xff09;。不同品…

AR智能眼镜|AR眼镜定制开发|工业AR眼镜方案

AR眼镜的设计与制造成本主要受到芯片、显示屏和光学方案的影响&#xff0c;因此选择合适的芯片至关重要。一款优秀的芯片平台能够有效提升设备性能&#xff0c;并解决多种技术挑战。例如&#xff0c;采用联发科八核2.0GHz处理器&#xff0c;结合12nm制程工艺&#xff0c;这种低…

第二十一周机器学习笔记:动手深度学习之——数据操作、数据预处理

第二十周周报 摘要Abstract一、动手深度学习1. 数据操作1.1 数据基本操作1.2 数据运算1.2.1 广播机制 1.3 索引和切片 2. 数据预处理 二、复习RNN与LSTM1. Recurrent Neural Network&#xff08;RNN&#xff0c;循环神经网络&#xff09;1.1 词汇vector的编码方式1.2 RNN的变形…

ThinkPad t61p 作SMB服务器,打印服务器,pc ,android ,ipad利用此服务器互传文件

1.在t61p上安装win7 2,配置好smb 服务 3.再安装好打印驱动程序 4.pc与win7利用系统的网络互相发现,映射为硬盘使用。 5.android&#xff0c;ipad安装ES文件浏览器访问win7 共享文件夹&#xff0c;互传文件。 6.android手机安装FE文件浏览器&#xff0c;可以利用花生壳外网…

【深度学习之二】正则化函数(weight decay, dropout, label smoothing, and etc)详解,以及不同的函数适用的场景

在深度学习中正则化函数的重要性不言而喻&#xff0c;今天主要总结一些当前常用的一些正则化函数 在深度学习中&#xff0c;正则化&#xff08;Regularization&#xff09;是一种防止模型过拟合的技术。过拟合指的是模型在训练数据上表现很好&#xff0c;但在未见过的测试数据…

神经网络(系统性学习二):单层神经网络(感知机)

此前篇章&#xff1a; 神经网络中常用的激活函数 神经网络&#xff08;系统性学习一&#xff09;&#xff1a;入门篇 单层神经网络&#xff08;又叫感知机&#xff09; 单层网络是最简单的全连接神经网络&#xff0c;它仅有输入层和输出层&#xff0c;没有隐藏层。即&#x…

Linux 手动升级软件保姆级教程,适用所有软件,不限于麒麟等国产系统

1、检查软件版本&#xff0c;及是否安装 openssh为例 是否安装 rpm -qa|grep openssh 备份 mv /etc/ssh/ /home/ssh-bakmv /usr/bin/ssh /usr/bin/ssh.bakmv /usr/sbin/sshd /usr/sbin/sshd.bakmv /etc/pam.d/sshd /etc/pam.d/sshd.old2、机器如果不在身边&#xff0c;机器…

【大数据学习 | Spark-Core】Spark的改变分区的算子

当分区由多变少时&#xff0c;不需要shuffle&#xff0c;也就是父RDD与子RDD之间是窄依赖。 当分区由少变多时&#xff0c;是需要shuffle的。 但极端情况下&#xff08;1000个分区变成1个分区)&#xff0c;这时如果将shuffle设置为false&#xff0c;父子RDD是窄依赖关系&…

java操作doc——java利用Aspose.Words操作Word文档并动态设置单元格合并

在实际工作中&#xff0c;如果业务线是管理类项目或者存在大量报表需要导出的业务时&#xff0c;可以借助第三方插件实现其对应功能。 尤其是需要对word文档的动态操作或者模板数据的定向合并&#xff0c;使用Aspose会相对来说容易一些&#xff0c;而且相关文档比较完整&#…

电商一件发货软件闲管家使用教程

闲鱼闲管家是一款专为闲鱼卖家设计的电脑版工作台&#xff0c;旨在帮助卖家更高效地管理其在闲鱼平台上的业务。以下是关于闲鱼闲管家的一些主要特点和功能&#xff1a; 主要特点&#xff1a; 多账号管理&#xff1a;支持同时管理多达30个闲鱼账号&#xff0c;方便大型卖家或…

Docker Seata分布式事务保护搭建 DB数据源版搭建 结合Nacos服务注册

介绍 Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff09;是一个开源的分布式事务解决方案&#xff0c;旨在为微服务架构中的分布式系统提供事务管理支持。Seata 通过提供全局事务管理&#xff0c;帮助开发者在分布式环境中保持数据一致性 …

HTB:WifineticTwo[WriteUP]

目录 连接至HTB服务器并启动靶机 信息搜集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用curl访问靶机8080端口 使用浏览器直接访问/login路径 漏洞利用 使用searchsploit搜索该WebAPP漏洞 Payload USER_FLAG&#xff1a;bb…

【MySQL课程学习】:MySQL安装,MySQL如何登录和退出?MySQL的简单配置

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;MySQL课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 MySQL在Centos 7环境下的安装&#xff1a; 卸载…

oracle如何配置第二个监听优化数据传输

oracle如何配置第二个监听优化数据传输 服务器两个网卡&#xff0c;配置两个不同IP和端口的监听。 归档日志量每天很大&#xff0c;为了不影响业务&#xff0c;需要配置一个单独的万兆网络来专门的传输归档日志到DG库&#xff0c;这里就涉及到在19c中增加一个监听用来使用专门…

Feed流系统重构:架构篇

重构对我而言&#xff0c;最大的乐趣在于解决问题。我曾参与一个C#彩票算奖系统的重构&#xff0c;那时系统常因超时引发用户投诉。接手任务时&#xff0c;我既激动又紧张&#xff0c;连续两天几乎废寝忘食地编码。结果令人振奋&#xff0c;算奖时间从一小时大幅缩短至十分钟。…

【Linux驱动开发】驱动中的信号 异步通知开发

【Linux驱动开发】驱动中的信号 异步通知开发 文章目录 应用中的信号驱动中的信号应用程序接收驱动信号附录&#xff1a;嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动开发驱动设备号地址映射&#xff0c;虚拟内存和硬件内存地址字符…

单片机智能家居火灾环境安全检测-分享

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 传统的火灾报警系统大多依赖于简单的烟雾探测器或温度传感器&#xff0c;…