通过关键词采集文章采集api( requests模块和Ajax分析法采集微博关键词的方法分析及效果展示 )

优采云 发布时间: 2022-01-24 00:06

  通过关键词采集文章采集api(

requests模块和Ajax分析法采集微博关键词的方法分析及效果展示

)

  基于Requests和Ajax分析方法的新浪微博关键词采集

  1 项目介绍

  本项目介绍requests模块的使用方法和ajax解析方法采集微博关键词.

  本项目仅使用“杨幂”、“郑爽”、“赵丽颖”三个关键词挖掘实例。如果有需要在微博上挖其他关键词,可以替换关键词继续采集。

  目标:

  -搜索关键词,如#赵丽英#,微博下采集

  - 采集微博用户的性别、位置、机构、标签、行业、公司、简介等

  -采集关键词搜索结果的微博内容(以电影为例),可以分析电影的舆论评价,拍影迷画像等。

  2技术点3实施步骤3.1搜索微博内容爬取

  

import requests

def get_hot_info(kw, page):

"""

获取热搜文章信息

:param kw: 搜索关键字

:return: 搜索的文章

"""

# 使用在线URL*敏*感*词*进行解码, 如下:

# https://m.weibo.cn/api/container/getIndex?containerid=100103type%3D1%26q%3D%E4%BA%92%E8%81%94%E7%BD%91&page_type=searchall

# 微博的url基本地址

url = "https://m.weibo.cn/api/container/getIndex"

# url访问需要添加的参数

params = {

'containerid': '100103type=1&q=%s' % (kw),

'page': page

}

# 获取页面内容,并通过ijson解析返回一个字典;

hot_infos = requests.get(url, params).json()

# 提取需要的微博热搜正文内容

hot_cards = hot_infos['data']['cards']

infos = []

for card in hot_cards:

for text in card['card_group']:

if text.get('mblog'):

infos.append(text['mblog']['text'])

return infos

  3.2 数据清洗

  def data_cleaning(text):

"""

微博数据的清洗

:param text: 需要清洗的内容, 提取需要的中文

:return:

"""

import re

pattern = '([\u4e00-\u9fa5])'

cleanData = "".join(re.findall(pattern, text))

return cleanData

  3.3 持久保存数据

  def persistent_data(kw='996', filename='./data/996.txt', page=5):

"""

持久化保存爬取数据到文件中, 便于数据清洗于数据分析;

:param kw: 搜索的关键字

:param filename: 存储的文件位置

:param page: 爬取关键字微博信息的个数

:return:

"""

f = open(filename, 'w')

for page in range(page):

print(str(page).center(50, '*'))

print("正在爬取第%d页" % (page + 1))

infos = get_hot_info(kw, page + 1)

for info in infos:

info = data_cleaning(info)

f.write(info + '\n')

  3.4 词云展示分析

  

def wordcloud_analyze(filename, pngFile='./data/mao.jpg', savePngFile='./data/程序员.png'):

"""

词云分析

:param filename:

:return:

"""

import jieba

import wordcloud

import numpy as np

from PIL import Image

# 打开图片

imageObj = Image.open( pngFile)

cloud_mask = np.array(imageObj)

wc = wordcloud.WordCloud(

background_color='snow', # 背景颜色

font_path='/usr/share/fonts/wqy-microhei/wqy-microhei.ttc', # 处理中文数据时

min_font_size=5, # 图片中最小字体大小;

max_font_size=100, # 图片中最大字体大小;

margin=2,

mask=cloud_mask,

)

f = open(filename)

results = ''

for line in f:

line = line.strip()

result = jieba.lcut(line)

results += (",".join(result))

# print(results)

wc.generate(results)

wc.to_file( savePngFile)

  4 完整代码及效果展示

  import requests

def get_hot_info(kw, page):

"""

获取热搜文章信息

:param kw: 搜索关键字

:return: 搜索的文章

"""

# 使用在线URL*敏*感*词*进行解码, 如下:

# https://m.weibo.cn/api/container/getIndex?containerid=100103type%3D1%26q%3D%E4%BA%92%E8%81%94%E7%BD%91&page_type=searchall

# 微博的url基本地址

url = "https://m.weibo.cn/api/container/getIndex"

# url访问需要添加的参数

params = {

'containerid': '100103type=1&q=%s' % (kw),

'page': page

}

# 获取页面内容,并通过ijson解析返回一个字典;

hot_infos = requests.get(url, params).json()

# 提取需要的微博热搜正文内容

hot_cards = hot_infos['data']['cards']

infos = []

for card in hot_cards:

for text in card['card_group']:

if text.get('mblog'):

infos.append(text['mblog']['text'])

return infos

def persistent_data(kw='996', filename='./data/996.txt', page=5):

"""

持久化保存爬取数据到文件中, 便于数据清洗于数据分析;

:param kw: 搜索的关键字

:param filename: 存储的文件位置

:param page: 爬取关键字微博信息的个数

:return:

"""

f = open(filename, 'w')

for page in range(page):

print(str(page).center(50, '*'))

print("正在爬取第%d页" % (page + 1))

infos = get_hot_info(kw, page + 1)

for info in infos:

info = data_cleaning(info)

f.write(info + '\n')

def data_cleaning(text):

"""

微博数据的清洗

:param text: 需要清洗的内容, 提取需要的中文

:return:

"""

import re

pattern = '([\u4e00-\u9fa5])'

cleanData = "".join(re.findall(pattern, text))

return cleanData

def wordcloud_analyze(filename, pngFile='./data/mao.jpg', savePngFile='./data/程序员.png'):

"""

词云分析

:param filename:

:return:

"""

import jieba

import wordcloud

import numpy as np

from PIL import Image

# 打开图片

imageObj = Image.open( pngFile)

cloud_mask = np.array(imageObj)

wc = wordcloud.WordCloud(

background_color='black', # 背景颜色

font_path='/usr/share/fonts/wqy-microhei/wqy-microhei.ttc', # 处理中文数据时

min_font_size=5, # 图片中最小字体大小;

max_font_size=100, # 图片中最大字体大小;

margin=2,

mask=cloud_mask,

)

f = open(filename)

results = ''

for line in f:

line = line.strip()

result = jieba.lcut(line)

results += (",".join(result))

# print(results)

wc.generate(results)

wc.to_file( savePngFile)

if __name__ == '__main__':

kw = '程序员'

filename = './data/%s.txt' % (kw)

page = 100

# persistent_data(filename=filename, page=page)

wordcloud_analyze(filename)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线