今天是个好日子,让我们用Python采集今日全网热门话题评论,看看大家有多高兴

86 篇文章 63 订阅
31 篇文章 6 订阅

嗯,今天是个好日子,懂得都懂,不懂得看热搜,我不好说太多~

在这里插入图片描述

话不说多,我们直接来看看我大天朝人民有多高兴!


我们以围脖为例

首先我们打开评论,点击右键选择检查或者按F12,打开开发者工具。


选择network ,但是这时候咱们是没有数据的,所以需要刷新一下。

然后点击 fetch/XHR ,点击第四个链接

在这里插入图片描述
点击右侧 preview ,依次展开,就可以看到评论/ID/账号昵称等等信息。


点击headers ,request url的链接,就是本次咱们要获取数据的链接,先复制上。


那咱们开始写代码

首先导入数据请求模块

import requests

然后将url 粘贴进来

url = 'https://m.weibo.cn/comments/hotflow?id=4788920581098454&mid=4788920581098454&max_id_type=0'

加上headers伪装一下请求头,防止反爬,这里是没做翻页,所以只需要加User-Agent就行了。

headers = {
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36'
}

发送请求

response = requests.get(url=url, headers=headers)

获取一下数据

import requests
url = 'https://m.weibo.cn/comments/hotflow?id=4788920581098454&mid=4788920581098454&max_id_type=0'
headers = {
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
print(response.json())


但是现在的数据看起来有点不好看,而且我是获取了整页的,如果只获取单条数据的话,直接点左上角的搜索,把评论复制进去,后面的步骤就一样了。

获取下来了,咱们直接根据键值对提取相应的数据就好了。

首先咱们把data 全部取出来

然后遍历出来

for index in response.json()['data']['data']:

也就是键值对取值,根据冒号左边的内容,提取冒号右边的内容。

首先取的是第一个data

返回的是第二个data的内容,再取第二个data ,返回的就是下面的数据了。


把它遍历出来,使用pprint这个模块打印出来。

import requests

import pprint

url = 'https://m.weibo.cn/comments/hotflow?id=4788920581098454&mid=4788920581098454&max_id_type=0'
headers = {
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
print(response.json())

for index in response.json()['data']['data']:
		pprint.pprint(index)
		break

打印结果
在这里插入图片描述
用字典接收一下

dit = {
    '用户': index['user']['screen_name'],
    '地区': index['source'].replace('来自', ''),
    '评论': content,
    '日期': index['created_at']
}

但是我们只要中文就可以了,所以用正则去匹配出来。

先用index取txt的内容

然后通过正则取它里面所有的文字数据

re.findall('[]',index['text'])

不会写正则的话,可以百度在线正则表达式匹配,把需要匹配的数据复制进去,点匹配中文字符,就全部匹配出来了。

在这里插入图片描述

在正则后面加个 + 就会匹配成多个字段

在这里插入图片描述
直接把正则复制过来

re.findall('[\u4e00-\u9fa5]+',index['text'])

匹配出来后返回的是列表,那么直接用join 把内容放进去。

content = ''.join(re.findall('[\u4e00-\u9fa5]+', index['text']))

再运行一下

import requests

import pprint

url = 'https://m.weibo.cn/comments/hotflow?id=4788920581098454&mid=4788920581098454&max_id_type=0'
headers = {
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36'
}
response = requests.get(url=url, headers=headers)

for index in response.json()['data']['data']:
		content = ''.join(re.findall('[\u4e00-\u9fa5]+', index['text']))
		dit = {
		    '用户': index['user']['screen_name'],
		    '地区': index['source'].replace('来自', ''),
		    '评论': content,
		    '日期': index['created_at']
    }
    print(dit)

这效果,duang的一下就出来了


数据得到后,我们再保存在CSV里面去。

这有两种方式

1、第一种 CSV

导入模块

import CSV

CSV 保存

f = open('微博评论.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '用户',
    '地区',
    '评论',
    '日期',
])
csv_writer.writeheader()

2、第二种 pandas 也可以保存

导入模块

import pandas as pd

在response下面加上一个空列表

lis = []

然后把数据内容添加到空列表里面

lis.append(dit)

pandas 保存

pd_data = pd.DataFrame(lis)
pd_data.to_excel('微博评论.xlsx')

实现效果

在这里插入图片描述
我这里只爬了一页,所以只有19条数据。


这一条微博下面是有十万条评论的,我就不一一去演示了,大家可以自己去试试。

我整理了2022最新的Python电子书100本、Python基础视频教程一套、各种案例视频、代码等等直接在最下方获取,包括本文完整代码。

兄弟们,来都来了,点个关注呗!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值