当前位置:   article > 正文

零基础Python网络爬虫实现根据关键词爬取历史微博热搜(基于热搜神器网站)并利用jieba进行频度排序处理_jieba如何进行微博热点提取

jieba如何进行微博热点提取

根据关键词爬取历史微博热搜

写在最前一些废话

写这个主要是记录学习,这个代码比较简单,大部分参考了别人的代码,主要是加一些备注以及添加一些东西。
而且是零基础所以废话特 ! 别 ! 多!

爬虫

先扔一下代码再解释:

import json
import requests
import time
import pandas as pd
from http.cookies import SimpleCookie

## 设置headers和cookie,数据爬取
headers ={'User-Agent':'自己的header别不知道啊'}
raw_cookie= '自己的cookie我想你找得到,复制粘贴就行'

#cookie从字符串转换为可以使用的
cookie = SimpleCookie(raw_cookie)
requests_cookies = dict([(c, cookie[c].value) for c in cookie])

def stampToTime(stamp): #时间转换
    datatime = time.strftime("%Y-%m-%d",time.localtime(float(str(stamp)[0:10])))
    return datatime

resou = pd.DataFrame(columns=['datetime','title','searchCount'])

for i in range(1,131):#这个131别照抄啊,计算得知的
    url= 'https://www.enlightent.cn/research/top/getWeiboRankSearch.do?keyword=肺炎&from='+ str(i) +'&t=你自己的&accessToken=你自己的'
    #非常明显是不是?肺炎是关键词,换成你的,后面的也换!
    html = requests.get(url=url, cookies=requests_cookies, headers=headers).content
    data = json.loads(html.decode('utf-8'))
    
    if(i==131):
        for j in range(11): #一页20个
            print(j)
            resou = resou.append({'datetime':stampToTime(data['rows'][j]['updateTime']),
                    'title':data['rows'][j]['keywords'],'searchCount':data['rows'][j]['searchNums'],
                                  },ignore_index=True)
    else:
        for j in range(20): #一页20个,这个别改哦
            resou = resou.append({'datetime':stampToTime(data['rows'][j]['updateTime']),
                    'title':data['rows'][j]['keywords'],'searchCount':data['rows'][j]['searchNums'],
                                  },ignore_index=True)
resou.to_csv("resou-肺炎.csv", index_label="index_label",encoding='utf-8-sig')



resou_dt = resou.groupby('datetime',as_index=False).agg({'searchCount':['mean']})
resou_dt.columns = ['date','avg_count']

## 绘制日历图
from pyecharts import options as opts
from pyecharts.charts  import Calendar
data = [
        [resou_dt['date'][i], resou_dt['avg_count'][i]]
        for i in range(resou_dt.shape[0])
    ]

calendar = (
        Calendar(init_opts=opts.InitOpts(width='1800px',height='1500px'))
        .add("", data,calendar_opts=opts.CalendarOpts(range_=['2019-12-01', '2020-11-23']))
        .set_global_opts(
        #这个标题应该不要我多说
            title_opts=opts.TitleOpts(title="肺炎2019-12-01起每日热搜平均指数",pos_left='15%'),
            visualmap_opts=opts.VisualMapOpts(
                max_=3600000,
                min_=0,
                orient="horizontal",
                is_piecewise=False,
                pos_top="230px",
                pos_left="100px",
                pos_right="10px"
            )
            )
        .render('肺炎日期热力图.html')     
     )

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  1. 首先 ,是这个包,注意我关键词已经写了且搜了;
    在这里插入图片描述
    直接拉到最后,这个数据合成的URL,自己填上。也可以复制一下ULR看看页面。
    在这里插入图片描述
    顺便一提,当from大于所展示的所有但是有没有特别离谱的时候,就可以直接看见一个row是空的只有总数的页面,这就是所提到计算得知的东西

  2. 注意该网站要会员才能全部查看,要是你的只有几条,没会员而已;

jieba处理

对不起,犯懒了,好像这真的没什么要点…

import pandas as pd
import jieba.posseg as posseg
import json
import requests
data=pd.read_csv("F:\\201网络爬虫\\resou-肺炎.csv")
counts={}
for i in range(2640):
    words=posseg.lcut(data['title'][i]) # 搜索引擎模式
    #print(type(words))
    for word,flag in words:
        if(flag=='ns' and len(word)!=1):
            #print(word, flag)
            counts[word] = counts.get(word, 0) + 1    #遍历所有词语,每出现一次其对应的值加1         
items = list(counts.items())
#lambda是一个隐函数,是固定写法
#不懂的话看看这个!
#https://www.cnblogs.com/huigebj/p/11433896.html
items.sort(key=lambda x: x[1], reverse=True)    #根据词语出现的次数进行从大到小排序

for i in range(len(items)):
    w,n=items[i]
    dt=dt.append({'location':w,'times':n},ignore_index=True)

dt.to_csv("F:\\201网络爬虫\\resou-肺炎-地区.csv")

#疫情:2687
#新冠:4954
#肺炎:2641
#人名
#地区

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

items.sort(key=lambda x: x[1], reverse=True)这句不懂的话可以看看这篇,我觉得人家写的够好了(偷懒)
python3排序 sorted(key=lambda)

剩下的有问题麻烦踹我(躺倒)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/435655
推荐阅读
相关标签
  

闽ICP备14008679号