开启左侧

【python爬虫案例】爬取微博恣意搜索关键词的结果,以“唐山 ...

[复制链接]
在线会员 柚色清风 发表于 2023-1-20 09:10:42 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
1、爬与目标

各人佳,尔是马哥。
来日诰日分享一期python爬虫案例,爬与目标是新浪微专的微专数据,包罗:
页码, 微专id, 微专bid, 微专作家, 公布时间, 微专实质, 转收数, 批评数, 面赞数
颠末阐发调研,发明微专有3种会见方法,别离是:

  • PC端网页:https://weibo.com/
  • 挪动端:https://weibo.cn/
  • 脚机端:https://m.weibo.cn/
终极决定,颠末脚机端爬与。
那里,给各人分享一个爬虫小本领。当目标网站既存留PC网页端,又有脚机挪动端,倡议爬与挪动端,启事是:挪动端一般网页构造简朴,而且反爬才气较强,更便利爬虫爬与。
2、展示爬与成果

尔颠末爬虫代码,爬与了“唐山挨人”那个枢纽字下的前80页微专,部门数据以下:

【python爬虫案例】爬与微专尽情搜刮枢纽词汇的成果,以“唐山 ...-1.jpg

爬与成果

一同635条数据,同80页,好未几每一页没有到10条的数据。
3、解说代码

起首,导进需要用到的库:
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加入开辟者情势,根据下图操纵,阐发出目标恳求地点:

【python爬虫案例】爬与微专尽情搜刮枢纽词汇的成果,以“唐山 ...-2.jpg

开辟者情势

按照阐发成果,编辑恳求代码:
# 恳求地点
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')
# 批评数
co妹妹ents_count_list = jsonpath(cards, '$..mblog.co妹妹ents_count')
# 面赞数
attitudes_count_list = jsonpath(cards, '$..mblog.attitudes_count')把统统的字段的list数据,拼拆成DataFrame格局数据:
# 把列表数据保留成DataFrame数据
df = pd.DataFrame(
        {
                '页码':

精彩评论13

avatar
在线会员 jCgT25J 发表于 2023-1-20 09:11:27 | 显示全部楼层
只藏不赞,颜值减半![doge][暗中观察]
回复

使用道具 举报

avatar
在线会员 hG31PMftg 发表于 2023-1-20 09:11:41 | 显示全部楼层
马哥快快讲解讲解Scrapy框架爬虫[滑稽]
回复

使用道具 举报

avatar
在线会员 tkgvdkBWvT 发表于 2023-1-20 09:12:05 | 显示全部楼层
好地,择期安排~
回复

使用道具 举报

avatar
在线会员 ECCf2f 发表于 2023-1-20 09:12:46 | 显示全部楼层
自发布微博爬虫以来,很多小伙伴联系我,最多的问题集中在:1、报错ValueError: All arrays must be of the same length2、微博全文没有展开-基于这2个问题,升级了以下版本:1、去掉bid字段,避免报错2、针对全文进行展开后二次爬取微博长文-已经获取过原始代码的同学,在原链接重新获取一次,即可get最新版代码!
回复

使用道具 举报

avatar
在线会员 2p9KVB 发表于 2023-1-20 09:13:38 | 显示全部楼层
想爬实时微博,就是上面那个“实时”按钮。是不是只能用selenium了。但这样又得不到每条微博的统一格式的时间了。[语塞]
回复

使用道具 举报

avatar
在线会员 7s4v 发表于 2023-1-20 09:14:27 | 显示全部楼层
不用selenium,直接把代码里的请求地址,换成实时的,就行
回复

使用道具 举报

avatar
在线会员 kM2ugqWV 发表于 2023-1-20 09:15:23 | 显示全部楼层
能否根据时间段筛选呢?
回复

使用道具 举报

avatar
在线会员 K4xCnwUt 发表于 2023-1-20 09:16:10 | 显示全部楼层
微博内容咋清洗啊 删除多余的符号 表情这些
回复

使用道具 举报

avatar
在线会员 VeUB7M 发表于 2023-1-20 09:16:51 | 显示全部楼层
很多种方法: 正则表达式,replace,ascii码,等等
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )