爬取知乎热搜

Posted lansihan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬取知乎热搜相关的知识,希望对你有一定的参考价值。

一、主题式网络爬虫设计方案

1.主题式网络爬虫名称:微博热搜

2.爬取内容:爬取热搜名称、热度和排名

3.爬虫设计方案概述:先查找源代码,找到关键内容的索引标签,进行分析,提取需要的数据。然后对数据进行清洗和处理,以及可视化处理

4.难点:回归方程不熟练,知识点掌握不全。

二、主题页面的结构特征分析

1.爬取的网页https://s.weibo.com/top/summary?cate=realtimehot

技术图片

 

 

2.查看源代码

技术图片

 

 三、网络爬虫程序设计

 1.数据爬取与采集

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
url="https://s.weibo.com/top/summary?cate=realtimehot"
html=urlopen(url).read().decode(‘utf-8‘)
soup=BeautifulSoup(html,features=‘lxml‘)
information=soup.find_all(‘tr‘)
information=information[2:]
rank=[]
news=[]
zan_num=[]
for each in information:
    rank_temp=each.find(‘td‘,{‘class‘:‘td-01 ranktop‘})#获取排名
    if each.find(‘a‘,{‘target‘:‘_blank‘}) is None: #获取新闻
        news.append(each.find(‘a‘)[‘word‘])
    else:
        news.append(each.find(‘a‘,{‘target‘:‘_blank‘}).get_text())
    num=each.find(‘span‘)#获取新闻
    rank.append(rank_temp.get_text())
    zan_num.append(num.get_text())
    ("{0:<10} {1:{3}<30} {2:{3}>11}".format(‘rank‘,‘name‘,‘num‘, chr(12288)))
for i in range(len(rank)):
    print("{0:<10} {1:{3}<30} {2:{3}>11}".format(rank[i],news[i],zan_num[i],chr(12288)))
    import pandas as pd
data = pd.DataFrame()
data[‘rank‘] = rank
data[‘name‘] = news
data[‘number‘] = zan_num
data.to_excel(‘weibohot.xlsx‘, index=False)

爬取的数据

技术图片

 

将热搜前五存入excel

技术图片

 

2.对数据进行清洗和处理

import numpy as np
import pandas as pd
weibohot=pd.DataFrame(pd.read_excel(‘weibohot.xlsx‘))
weibohot.duplicated()
weibohot.drop_duplicates()
weibohot.isnull()
weibohot.notnull()

3.数据分析与可视化

柱形图

from weibohot import Bar

bar = Bar("微博热搜", )
bar.add("热度", ["郭敬明写的歌词", "高危人群不建议五一出行旅游", "阿玛尼205", "学生微信群发敲打表情被批", "潘玮柏"], [3911317,1755578,1726391,1269127,1183976])
bar.show_config()
bar.render()

动态散点图

from pyecharts import EffectScatter

v1 = ["郭敬明写的歌词", "高危人群不建议五一出行旅游", "阿玛尼205", "学生微信群发敲打表情被批", "潘玮柏"]
v2 = [3911317,1755578,1726391,1269127,1183976]
es = EffectScatter("动态散点图示例")
es.add("effectScatter", v1, v2)
es.render()

 

将以上各部分的代码汇总,附上完整程序代码

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
url="https://s.weibo.com/top/summary?cate=realtimehot"
html=urlopen(url).read().decode(utf-8)
soup=BeautifulSoup(html,features=lxml)
information=soup.find_all(tr)
information=information[2:]
rank=[]
news=[]
zan_num=[]
for each in information:
    rank_temp=each.find(td,{class:td-01 ranktop})#获取排名
    if each.find(a,{target:_blank}) is None: #获取新闻
        news.append(each.find(a)[word])
    else:
        news.append(each.find(a,{target:_blank}).get_text())
    num=each.find(span)#获取新闻
    rank.append(rank_temp.get_text())
    zan_num.append(num.get_text())
    ("{0:<10}	{1:{3}<30}	{2:{3}>11}".format(rank,name,num, chr(12288)))
for i in range(len(rank)):
    print("{0:<10}	{1:{3}<30}	{2:{3}>11}".format(rank[i],news[i],zan_num[i],chr(12288)))
    import pandas as pd
data = pd.DataFrame()
data[rank] = rank
data[name] = news
data[number] = zan_num
data.to_excel(weibohot.xlsx, index=False)
import numpy as np
import pandas as pd
weibohot=pd.DataFrame(pd.read_excel(weibohot.xlsx))
weibohot.duplicated()
weibohot.drop_duplicates()
weibohot.isnull()
weibohot.notnull()
from weibohot import Bar

bar = Bar("微博热搜", )
bar.add("热度", ["郭敬明写的歌词", "高危人群不建议五一出行旅游", "阿玛尼205", "学生微信群发敲打表情被批", "潘玮柏"], [3911317,1755578,1726391,1269127,1183976])
bar.show_config()
bar.render()

from pyecharts import EffectScatter

v1 = ["郭敬明写的歌词", "高危人群不建议五一出行旅游", "阿玛尼205", "学生微信群发敲打表情被批", "潘玮柏"]
v2 = [3911317,1755578,1726391,1269127,1183976]
es = EffectScatter("动态散点图示例")
es.add("effectScatter", v1, v2)
es.render()

四、结论

1.经过对主题数据的分析与可视化,可以得到哪些结论?

疫情期间过后人们对日常娱乐的关注量有回升至之前。

2.对本次程序设计任务完成的情况做一个简单的小结。

对知识点掌握不全,编写时有困难。爬虫是一个非常实用的工具。

以上是关于爬取知乎热搜的主要内容,如果未能解决你的问题,请参考以下文章

爬虫---Beautiful Soup 爬取知乎热榜

java实现获取百度/微博/头条/知乎热榜数据

python爬取知乎首页问题

知乎热搜知乎搜索引擎入口知乎排名

Python 爬取知乎用户属性生成词语

Python爬取知乎与我所理解的爬虫与反爬虫