【python爬虫案例】爬取微博任意搜索关键词的结果,以“唐山打人”为例

一、爬取目标

大家好,我是马哥

今天分享一期python爬虫案例,爬取目标是新浪微博的微博数据,包含:

页码, 微博id, 微博bid, 微博作者, 发布时间, 微博内容, 转发数, 评论数, 点赞数

经过分析调研,发现微博有3种访问方式,分别是:

  1. PC端网页:https://weibo.com/

  2. 移动端:https://weibo.cn/

  3. 手机端:https://m.weibo.cn/

最终决定,通过手机端爬取。

这里,给大家分享一个爬虫小技巧。当目标网站既存在PC网页端,又有手机移动端,建议爬取移动端,原因是:移动端一般网页结构简单,并且反爬能力较弱,更方便爬虫爬取。

二、展示爬取结果

我通过爬虫代码,爬取了“唐山打人”这个关键字下的前80页微博,部分数据如下:爬取结果
一共635条数据,共80页,差不多每页不到10条的数据。

三、讲解代码

首先,导入需要用到的库:

import os
import re  # 正则表达式提取文本
from jsonpath import jsonpath  # 解析json数据
import requests  # 发送请求
import pandas as pd  # 存取csv文件
import datetime  # 

然后,定义一个转换时间字符串的函数,因为爬取到的时间戳是GMT格式(类似这种:Fri Jun 17 22:21:48 +0800 2022)的,需要转换成标准格式:

def trans_time(v_str):
	"""转换GMT时间为标准格式"""
	GMT_FORMAT = '%a %b %d %H:%M:%S +0800 %Y'
	timeArray = datetime.datetime.strptime(v_str, GMT_FORMAT)
	ret_time = timeArray.strftime("%Y-%m-%d %H:%M:%S")
	return ret_time

定义一个请求头,后面发送请求的时候带上它,防止反爬:

# 请求头
headers = {
	"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Mobile Safari/537.36",
	"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
	"accept-encoding": "gzip, deflate, br",
}

打开chrome浏览器,按F12进入开发者模式,按照下图操作,分析出目标请求地址:开发者模式
根据分析结果,编写请求代码:

# 请求地址
url = 'https://m.weibo.cn/api/container/getIndex'
# 请求参数
params = {
	"containerid": "100103type=1&q={}".format(v_keyword),
	"page_type": "searchall",
	"page": page
}
# 发送请求
r = requests.get(url, headers=headers, params=params)

直接用json格式,接收返回的数据:

# 解析json数据
cards = r.json()["data"]["cards"]

下面,通过jsonpath,快速解析出各个字段数据。

科普知识:jsonpath是一种快速解析json数据的方法,语法规则有点像xpath,这里就不展开讲了,

详细介绍,请见:

JsonPath完全介绍及详细使用教程_Sunny蔬菜小柠的博客-CSDN博客_jsonpath

下面展示部分字段解析过程:

# 转发数
reposts_count_list = jsonpath(cards, '$..mblog.reposts_count')
# 评论数
comments_count_list = jsonpath(cards, '$..mblog.comments_count')
# 点赞数
attitudes_count_list = jsonpath(cards, '$..mblog.attitudes_count')

把所有的字段的list数据,拼装成DataFrame格式数据:

# 把列表数据保存成DataFrame数据
df = pd.DataFrame(
	{
		'页码': [page] * len(id_list),
		'微博id': id_list,
		'微博bid': bid_list,
		'微博作者': author_list,
		'发布时间': time_list,
		'微博内容': text2_list,
		'转发数': reposts_count_list,
		'评论数': comments_count_list,
		'点赞数': attitudes_count_list,
	}
)

最后,通过to_csv,(记得加上参数 encoding='utf_8_sig')把数据持久化存储下来。
需要说明的是,微博数据爬取下来后,会存在少量重复数据,所以,去重处理一下:

# 删除重复数据
df.drop_duplicates(subset=['微博bid'], inplace=True, keep='first')
# 再次保存csv文件
df.to_csv(v_weibo_file, index=False, encoding='utf_8_sig')
print('数据清洗完成')

最终,数据保存完毕。

四、同步视频

4.1 演示视频

https://www.zhihu.com/zvideo/1521809935360385024

4.2 讲解视频

https://www.zhihu.com/zvideo/1521898658362155008

五、附:完整源码

附完整源码:点击这里完整源码


我是马哥,感谢您的阅读。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【python爬虫案例】爬取微博任意搜索关键词的结果,以“唐山打人”为例 - Python技术站

(0)
上一篇 2023年4月2日 下午5:25
下一篇 2023年4月2日

相关文章

  • pyecharts世界地图用:国家中英文对照表.xlsx

    用pyecharts画Map或者Geo,需要用到的国家中英文对照表: 英文 中文 Zimbabwe 津巴布韦 Zambia 赞比亚 Yugoslavia 南斯拉夫 Yemen 也门 Western Sahara 西撒哈拉 Wallis and Futuna 瓦利斯群岛和富图纳群岛 W. Sahara 西撒哈拉 Vietnam 越南 Venezuela 委内瑞…

    Python开发 2023年4月2日
    00
  • 【可视化分析案例】用python分析B站Top100排行榜数据

    目录 一、数据源 二、数据读取 三、数据概览 四、数据清洗 五、可视化分析 5.1 相关性分析(Correlation) 5.2 饼图(Pie) 5.3 箱形图(Boxplot) 5.4 词云图(wordcloud) 六、同步讲解视频 七、附完整源码 一、数据源 之前,我分享过一期爬虫,用python爬取Top100排行榜: 最终数据结果,是这样的: 在此数…

    2023年4月2日
    00
  • 【2023微博签到爬虫】用python爬上千条m端微博签到数据

    一、爬取目标 大家好,我是 @马哥python说,一枚10年程序猿。 今天分享一期python爬虫案例,爬取目标是新浪微博的微博签到数据,字段包含:页码,微博id,微博bid,微博作者,发布时间,微博内容,签到地点,转发数,评论数,点赞数 经过分析调研,发现微博有3种访问方式,分别是: PC端网页:https://weibo.com/ 移动端:https:/…

    2023年3月31日
    00
  • 【爬虫+情感判定+Top10高频词+词云图】”王心凌”热门弹幕python舆情分析

    目录 一、背景介绍 二、代码讲解-爬虫部分 2.1 分析弹幕接口 2.2 讲解爬虫代码 三、代码讲解-情感分析部分 3.1 整体思路 3.2 情感分析打标 3.3 统计top10高频词 3.4 绘制词云图 3.5 情感分析结论 四、同步演示视频 五、附完整源码 一、背景介绍 最近一段时间,王心凌在浪姐3的表现格外突出,唤醒了一大批沉睡中的老粉,纷纷直呼’爷青…

    2023年4月2日
    00
  • 【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩”狂飙”的评论

    目录 一、背景介绍 二、爬虫代码 2.1 展示爬取结果 2.2 爬虫代码讲解 三、可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间分析-折线图 3.3.3 点赞数分布-直方图 3.3.4 评论内容-情感分布饼图 3.3.5 评论内容-词云图 四、演示视频 五、附完整源码 一、背景介绍 您好…

    2023年3月31日
    00
  • 【NLP教程】用python调用百度AI开放平台进行情感倾向分析

    目录 一、背景 二、操作步骤 2.1 创建应用 2.2 获取token 2.3 情感倾向分析 三、其他情感分析 四、讲解视频 一、背景 Hi,大家!我是 @马哥python说 ,一名10年程序猿。 今天我来演示一下:通过百度AI开放平台,利用python调用百度接口进行中文情感倾向分析,并得出情感极性分为积极、消极还是中性以及置信度结果。 二、操作步骤 首先…

    python 2023年4月25日
    00
  • 【拖拽可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!

    目录 一、设计方案 二、项目背景 三、电影爬虫 3.1 导入库 3.2 发送请求 3.3 解析页面 3.4 存储到csv 3.5 讲解视频 四、数据持久化存储 4.1 导入库 4.2 存入MySQL 4.3 讲解视频 五、开发可视化大屏 5.1 柱形图 5.2 饼图 5.3 词云图 5.4 数据表格 5.5 涟漪散点图 5.6 条形图 5.7 大标题 5.8…

    2023年4月2日
    00
  • 【Python爬虫案例】用python爬1000条哔哩哔哩搜索结果

    目录 一、爬取目标 二、讲解代码 三、同步讲解视频 四、完整源码 一、爬取目标 大家好,我是 @马哥python说 ,一名10年程序猿。 今天分享一期爬虫的案例,用python爬哔哩哔哩的搜索结果,也就是这个页面: 爬取字段,包含:页码, 视频标题, 视频作者, 视频编号, 创建时间, 视频时长, 弹幕数, 点赞数, 播放数, 收藏数, 分区类型, 标签, …

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部