之前写了一个微博的定向博文评论搜索,但是前提条件是需要获取到博文链接。但是现在大数据分析,以及一些情感分析,是需要大量的有关键字博文的信息的。所以这次做了相关的热门博文采集,求实也可以成为关键字微博博文信息采集。
没什么难点,只是注意几点
- 我用的手机端访问,总是被反爬,这里需要一些备用的UA,随机跟换UA,会好很多。
- 我个人更偏向于直接分析Ajax数据,因为json数据显示比较多。所以解析起来真的方便好多
- 正则真的是痛点,我要加强
- 这次的解析信息没有做存储在excel真的是因为那个博文提取把我搞累了。还是正则没用好。所以直接采取打印了
- 等以后心态好了,再做后面的数据清洗吧。
上代码:
'''
微博热搜博文统计
需求:热搜关键词
统计博文内容,点赞数,转评数
'''
from requests_html import HTMLSession
import json,random,re
from pprint import pprint
session = HTMLSession()
# 手机UA伪装列表 谷歌浏览器
UA=[...]
def main():
# https: // m.weibo.cn / api / container / getIndex
page = 1
while page>=1:
print('第{}页开始==='.format(page))
# 微博内容列表连接
start_url = 'https://m.weibo.cn/api/container/getIndex'
# 参数
parames = {'containerid': '100103type=60&q={}&t=10'.format(key),
'title': '热门-{}'.format(key),
'cardid': 'weibo_page',
'xtparam': 'title=热门&mid=&q={}'.format(key),
'luicode': '10000011',
'lfid': '100103type=1&t=10&q={}'.format(key),
'page': str(page)}
res = session.get(url=start_url, headers=headers, params=parames)
# print(res.json())
# break
# 判断 如果页码里面没有数据 则终止 说明翻页结束
if res.json()['ok'] == 0:
break
else:
# 在这里解析 这是json数据集
content_json_list = res.json()
# print(content_json_list)
json_parse(content_json_list)
page+=1
# 在这里解析 这是json数据集
def json_parse(content_json_list):
cards = content_json_list['data']['cards']
for card in cards:
# pprint(card)
# 创建时间
create_time = card['mblog']['created_at']
# 评论数量
comments_count = card['mblog']['comments_count']
# 转发数
reposts_count = card['mblog']['reposts_count']
# 点赞数
attitudes_count = card['mblog']['attitudes_count']
# 博文bid _json数据
bid_num=card['mblog']['bid']
# 博文详情链接 的 json数据
weibo_detail_text_url='https://m.weibo.cn/statuses/show?id={}'.format(bid_num)
# print(weibo_detail_text_url)
text=weibo_text_parse(weibo_detail_text_url)
print('创建时间:'+create_time)
print('评论数:'+str(comments_count))
print('转发数:'+str(reposts_count))
print('点赞数:'+str(attitudes_count))
print('博文:'+text)
print('--------------------------------------------------------------------------------------')
#进入博文链接 获取博文内容
def weibo_text_parse(url):
res_json=session.get(url,headers=headers).json()
# 博文内容
text=res_json['data']['text']
return text
if __name__ == '__main__':
headers={'User-Agent':random.choice(UA),'accept': 'application/json, text/plain, */*',
'accept-encoding': 'gzip, deflate, br',
'mweibo-pwa': '1',
'Upgrade-Insecure-Requests': '1'}
key=input('请输入热搜关键词:')
# key='鹿晗状态'
main()
最后出来就是这样的:
如果以后有客户遇到这样的需求,我只需要稍微改进一下就好了…