爬取跑车人气排行榜相关信息
- 实现思路:本案使用requests库爬取目标页面HTML代码,然后使用beautifulSoup库解析页面内容提取目标信息,最后利用pandas将数据存储,读取,再打印出来
1.主题页面的结构特征
查找需要的数据,进行查找定位
三、网络爬虫程序设计
1.数据爬取与采集
首先爬取网页框架
import requests def open_url(url):#获取目标页面 #伪装用户 headers = {\'User-Agent\':\'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36\'} #获取网页 res = requests.get(url,headers=headers) return res#返回页面内容 def main(): url="https://top.16888.com/auto_rqjb9.html" res = open_url(url) with open("test.text","w",encoding="utf-8") as file: file.write(res.text)#测试过程是否出错 if __name__ == "__main__": main()
测试爬取内容
将内容进行清洗和处理
def qingxi(data):#专门清洗data n=[] for i in data: m=i.split(\'\n\') #删除无效数据 m.pop(0) m.pop(-1) #整理有用的数据 n.append(m) return n
保存到excel文件
#保存excel文件 def to_excel(data1,data2): wb = openpyxl.Workbook() wb.guess_types = True ws = wb.active ws.append(data1) for each in data2: ws.append(each) wb.save("跑车人气排行榜.xlsx")
#绘制折线图 \'\'\'def line_diagram(): x = df[\'排名\'] y = df[\'网友口碑\'] plt.xlabel(\'排名\') plt.ylabel(\'网友口碑\') plt.plot(x,y) plt.scatter(x,y) plt.title("排名与网友口碑折线图") plt.show()\'\'\' #绘制盒图 \'\'\'box_diagram(): sns.boxplot(x=\'排名\',y=\'网友口碑\', data=df) box_diagram()\'\'\' #绘制散点图 \'\'\'x = df.排名 y = df.关注度 plt.ylabel("关注度") plt.scatter(x,y,color="purple",label="散点") plt.title("排名与关注度散点图") plt.legend() plt.show()\'\'\' #回归分析 \'\'\'file_path = "跑车人气排行榜.xlsx" df = pd.read_excel(file_path) sns.lmplot(x=\'排名\',y=\'关注度\',data=df)\'\'\'
附上完整代码
import requests import bs4 import openpyxl import matplotlib.pyplot as plt import pandas as pd plt.rcParams[\'font.sans-serif\']=[\'SimHei\']#用来正常显示中文 def open_url(url): headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"} res = requests.get(url,headers=headers) return res def find_data(res): data= [] soup = bs4.BeautifulSoup(res.text,"html.parser") #根据标签找到数据所在位置 n = soup.find(\'div\',class_="table_show") tgt = n.find_all("tr") #创建两个列表存放数据 content1=[] content2=[] #标题 content1.append(tgt.pop(0).text) #数据 for i in tgt: content2.append(i.text) #将两个数据存放到新的列表中 contents=[] contents.append(content1) contents.append(content2) #返回这个列表 return contents #保存excel文件 def to_excel(data1,data2): wb = openpyxl.Workbook() wb.guess_types = True ws = wb.active ws.append(data1) for each in data2: ws.append(each) wb.save("跑车人气排行榜.xlsx") #清洗数据的东西 def qingxi(data):#专门清洗data n=[] for i in data: m=i.split(\'\n\') #删除无效数据 m.pop(0) m.pop(-1) #整理有用的数据 n.append(m) return n #主程序 def main(): url = "https://top.16888.com/auto_rqjb9.html" res = open_url(url) data = find_data(res) #清洗数据 data1=qingxi(data[0])[0] data2=qingxi(data[1]) #测试数据内容 \'\'\'for i in data2: for u in range(6): print(\'{}:{}\'.format(data1[u],i[u]))\'\'\' #保存excel文件 to_excel(data1,data2) df = pd.read_excel("跑车人气排行榜.xlsx") #绘制折线图 \'\'\'def line_diagram(): x = df[\'排名\'] y = df[\'网友口碑\'] plt.xlabel(\'排名\') plt.ylabel(\'网友口碑\') plt.plot(x,y) plt.scatter(x,y) plt.title("排名与网友口碑折线图") plt.show()\'\'\' #绘制盒图 \'\'\'box_diagram(): sns.boxplot(x=\'排名\',y=\'网友口碑\', data=df) box_diagram()\'\'\' #绘制散点图 \'\'\'x = df.排名 y = df.关注度 plt.ylabel("关注度") plt.scatter(x,y,color="purple",label="散点") plt.title("排名与关注度散点图") plt.legend() plt.show()\'\'\' #回归分析 \'\'\'file_path = "跑车人气排行榜.xlsx" df = pd.read_excel(file_path) sns.lmplot(x=\'排名\',y=\'关注度\',data=df)\'\'\' if __name__ == "__main__": main()
四 结论
1.结论:对主题数据的分析与可视化,能够将数据变得更加直观清晰,能够更好的对数据进行信息提取。此次排名可以看出跑车的排名和关注度是成正相关的,吸引大众的不仅仅是跑车的品牌也有对跑车的综合评分。
2.任务小结:此次任务虽然说是完成了,但是还是有很多不足,在整个过程中,对知识掌握的不足导致于更多的需要在视频及朋友间寻求帮助才能够完成任务。但是在其中也是学到了很多东西,对编程这一方向有了更多兴趣。