写这个主要是记录学习,这个代码比较简单,大部分参考了别人的代码,主要是加一些备注以及添加一些东西。
而且是零基础所以废话特 ! 别 ! 多!
先扔一下代码再解释:
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')
)
首先 ,是这个包,注意我关键词已经写了且搜了;
直接拉到最后,这个数据合成的URL,自己填上。也可以复制一下ULR看看页面。
顺便一提,当from大于所展示的所有但是有没有特别离谱的时候,就可以直接看见一个row是空的只有总数的页面,这就是所提到计算得知的东西
注意该网站要会员才能全部查看,要是你的只有几条,没会员而已;
对不起,犯懒了,好像这真的没什么要点…
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)
剩下的有问题麻烦踹我(躺倒)