零基础Python网络爬虫实现根据关键词爬取历史微博热搜(基于热搜神器网站)并利用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. 首先 ,是这个包,注意我关键词已经写了且搜了;
    零基础Python网络爬虫实现根据关键词爬取历史微博热搜(基于热搜神器网站)并利用jieba进行频度排序处理_第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
#人名
#地区

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

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

你可能感兴趣的:(python,爬虫)