Python采集某评论区内容的实现示例
作者:极客飞虎 发布时间:2023-02-28 15:07:10
前言
我们知道在这个互联网时代,评论已经在我们的生活到处可见,评论区里面的信息是一个非常有趣和有争议的地方。我们今天,就来获取某技术平台的评论,和大家分享一下,我获取数据的过程,也是一个尝试的过程。
发送请求
我们首先,确定我们要获取哪一个文章下面的评论区。我们先使用开发者工具,定位到我们要的数据。
我们通过数据抓取,我们发现,这个平台的评论区数据,放在了一个叫getlist
数据包里面了。
我们就不难明白,我们只要请求这个url
,在传一个关于文章的参数,我们就能获取到我们想要的数据。而且,我们发现,这个是post请求。我们先按正常思路写代码。
import requests
url = 'https://xie.infoq.cn/public/v1/comment/getList'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
}
res = requests.post(url,headers=headers)
print(res)
我们发现返回了一个<Response [451]>
的值,我们可能就是少穿了参数,我们接下来,把参数加上试试。
data = {
'id': "594899140323389440",
'score': '1682043841339',# 1681968121323
'size': '100',
}
我们发现还是不行,所以,我们想到了,这个要加一个防盗链。我们把相应的参数传进去,我们再来看看效果。
headers ={
'Host': 'xie.infoq.cn',
'Origin': 'https://xie.infoq.cn',
'Referer': 'https://xie.infoq.cn/article/a5f16dffb45139cba72691c29',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
}
res = requests.post(url,data = data,headers=headers)
我们发现虽然返回了<Response [200]>
,但是,我们还是拿不到数据,我们看看服务器给我们返回了什么样子的数值。
{"code":-1,"data":{},"error":{"code":-2005,"msg":"ID不能为空"},"extra":{"cost":0.000170465,"request-id":"7c1dc236c95aceb9e56da271b056be88@2@infoq"}}
它提示我们"msg":"ID不能为空"
,说明我们data传入传错了。
不难看出,就是我们的文章id没有传进去,可能是我们传递的参数方式错了,我们这里要注意,要用json
格式传参。正确的请求方式如下:
res = requests.post(url,json = data,headers=headers)
我们发现,就可以获取到了数据,在这个过程,我们不断的尝试,最后,也拿到了我们想要的数据,我们会不会有一些成就感。我们看看获取到了什么样子的数据吧。
拿到了,这样的数据,大家就不难拿到我们要的数据,直接字典取值就好了,今天,我们用了大篇幅的段落,来解释我们是如何获取数据的。
解析数据
我们接下来就可以解析数据了,代码很简单。我这里直接获取评论了,不获取评论者了,原理是一样的,大家感兴趣的可以自己去试试。
datas = res.json()['data']['list']
for contents in datas:
content = contents['content']
print(content)
这段代码将从 res.json()['data']['list']
中获取数据,并将其存储在 datas
变量中。然后,它使用一个 for
循环遍历 datas
中的每个元素,并将每个元素的 content
属性存储在 content
变量中。最后,它打印出每个元素的 content
属性。
我们直接看效果,这个很简单的。
来源:https://juejin.cn/post/7224840969790701626
猜你喜欢
- 从AspJpeg1.8 版本开始,AspJpeg 提供了比 PrintText 更为灵活的文本绘图方法PrintTextEx,PrintTe
- 刚看到吴磊同学的一些关于购物车的想法,正巧本人丁学对电子商务这方面比较熟悉,跳出来献丑了,希望对一些同行有些用处。本来想回复到下面的,结果发
- 做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而
- 以前大家谈了很多有关打开数据库连接安全的问题,现在我再提出一种思路:使用activex dll来保护你的代码。(既可以不用为使用共享的加密软
- 设计页面时,经常会从一个页面打开一个子窗口以供浏览者查看。通常,这种子窗口中的内容一经浏览者看过,对于浏览者而言就不再需要,而他们常常会忘记
- Javascript中的对像赋值与Java中是一样的,都为引用传递.就是说,在把一个对像赋
- 简单的2048小游戏不多说,直接上图,这里并未实现GUI之类的,需要的话,可自行实现:接下来就是代码模块,其中的2048游戏原来网络上有很多
- 一、设置开启SMTP服务并获取授权码可以参考第一篇文章,这里不再赘述:【一】https://www.jb51.net/article/142
- div+css实现圆角边框,在网络上查看了一下,很多都是实现圆角的矩形的方法,我在这里介绍的是实现圆角矩形边框的方法。用代码说明问题:<
- 题目:用 JavaScript 代码实现空位补零,比如 pad(12, 3) => 012实现一:/* 平淡无奇法 */functio
- 1、在Asp页面首部加入Response.Buffer = True Response.ExpiresAbso
- 例子:(简 > 繁)面包 > 麵包 (zh-tw)寮国 > 老撾 (zh-hk)中国人寿 > 中國人壽 (zh-hk
- 情况1:Go语言中,若在子go程中创建一个新 go程,子go程释放(销毁),新创建的go程不会随着子go程的销毁而销毁。原因:go程共享堆,
- 大家经常用的是Adodb.Stream,但这时就有个缺陷,就是不支持断点续传了。经常看到flashget中是红脸(即不支持断点续传)其实支持
- 一:安装PyQt5pip install pyqt5如果你的系统没有安装pip请阅读我们的另一篇文章 windows下python安装pip
- 需求问题在日常工作中,对于前端发送过来的请求,后端django大部分都是采用json格式返回,也有采用模板返回视图的方式。在模板返回视图的方
- 外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT J
- <%Class Cls_TemplateDim RegDim PageDim CIDDim SIDDim RuleDim Conten
- char、varchar、text和nchar、nvarchar、ntext的区别1、CHAR。CHAR存储定长数据很方便,CHAR字段上的