------主题式网络主题式网络爬虫设计方案------
1.爬虫名称:爬取微博热搜
2.爬虫爬取的内容:爬取微博热搜数据。 数据特征分析:各数据分布紧密联系。
3.网络爬虫设计方案概述:
实现思路:通过访问网页源代码使用xpath正则表达爬取数据,对数据进行保存数据,再对数据进行清洗和处理,数据分析与可视化处理。
技术难点:在编程的过程中,若中间部分出现错误,可能导致整个代码需要重新修改。数据实时更新,会导致部分上传的图形不一致。
------主题页面的结构特征分析------
1.主题页面的结构和特征分析:爬取数据都分布在标签'div.cc-cd-cb nano has-scrollbar'里面,标题标签为'span.t',热度标签为'span.e'。
2.Htmls页面解析:
3.节点(标签)查找方法与遍历方法:通过xpath遍历标签。利用xpath正则表达查找。
------网络爬虫程序设计------
importrequestsfrom lxml importetreeimportpandas as pdimportnumpy as npimportmatplotlib.pyplot as pltimportmatplotlibfrom scipy.optimize importleastsqimportscipy.stats as stsimportseaborn as sns
url= "https://tophub.today/"headers= {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362'}
html= requests.get(url,headers = headers)
html= html.content.decode('utf-8')
html = etree.HTML(html)
div= html.xpath("//div[@id='node-1']/div")for a in div:
titles = a.xpath(".//span[@class='t']/text()")
numbers = a.xpath(".//span[@class='e']/text()")
b= []
for i in range(25):
b.append([i+1,titles[i],numbers[i][:-1]])
file = pd.DataFrame(b,columns = ['排名','今日热搜','热度(单位为万)'])print(file)
file.to_csv('微博热搜榜热度数据.csv')
2.对数据进行清洗和处理:
df = pd.DataFrame(pd.read_csv('微博热搜榜热度数据.csv'))
df.head()