Python高级应用程序设计任务
Posted 谭义柔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python高级应用程序设计任务相关的知识,希望对你有一定的参考价值。
Python高级应用程序设计任务要求
用Python实现一个面向主题的网络爬虫程序,并完成以下内容:
(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台)
一、主题式网络爬虫设计方案(15分)
1.主题式网络爬虫名称
新浪微博热点话题爬虫。
2.主题式网络爬虫爬取的内容与数据特征分析
2.主题式网络爬虫爬取的内容与数据特征分析
爬取新浪热点话题跟阅读量。
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)
先爬取页面的HTML,然后使用正则表达式爬取话题跟阅读量,再存在文件中。
二、主题页面的结构特征分析(15分)
1.主题页面的结构特征
1.主题页面的结构特征
页码在page=后面。
2.Htmls页面解析
我们想要的信息在script中,使用BeautifulSoup库只能爬取到script标签,难以对数据进行精确提取,所以我直接使用正则表达式进行爬取。
3.节点(标签)查找方法与遍历方法(必要时画出节点树结构)
使用re.findall()进行匹配。
三、网络爬虫程序设计(60分)
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后面提供输出结果的截图。
程序源代码:
import requests import os import re #爬取页面 def getHTMLText(url): try: #假装成浏览器访问 kv = {\'Cookie\':\'SINAGLOBAL=4844987765259.994.1544506324942; \\ SUB=_2AkMqmKIaf8NxqwJRmPoVxWnmaIV-ygDEieKcxFPBJRMxHRl-yT9jqmc8tRB6ARiM9rPSLjsy2kCgBq61u7x2M9eTeKTA; \\ SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WFYIzVSU-rQ8YIqH5sJ2vs7; \\ login_sid_t=6f2f5ed24c4e1f2de505c160ca489c97; cross_origin_proto=SSL;\\ _s_tentry=www.baidu.com; UOR=,,www.baidu.com; Apache=9862472971727.955.1575730782698; \\ ULV=1575730782710:6:1:1:9862472971727.955.1575730782698:1569219490864; \\ YF-Page-G0=b7e3c62ec2c0b957a92ff634c16e7b3f|1575731639|1575731637\',\\ \'user-agent\':\'Mozilla/5.0\',\\ \'Accept\':\'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\'} #获取目标页面 r = requests.get(url,headers = kv) #判断页面是否链接成功 r.raise_for_status() #使用HTML页面内容中分析出的响应内容编码方式 #r.encoding = r.apparent_encoding #返回页面内容 return r.text except: #如果爬取失败,返回“爬取失败” return "爬取失败" #爬取数据 def getData(nlist,vlist,html): #爬取新浪热门话题标题 flag = re.findall("alt=.{0,3}#.{1,15}#",html) #对标题进行清洗 for i in range(len(flag)): nlist.append(flag[i][5:]) #爬取话题浏览量 flag = re.findall(\'<span.{0,3}class=.{0,3}number.{0,3}>.{0,8}<.{0,3}span>\',html) #对浏览量进行清洗 for i in range(len(flag)): vlist.append(flag[i][23:-9]) return nlist,vlist #打印结果 def printList(nlist,vlist,num): for i in range(num): print("````````````````````````````````````````````````````````````````````````````") print("排名:{}".format(i+1)) print("标题:{}".format(nlist[i])) print("阅读量:{}".format(vlist[i])) #数据存储 def dataSave(nlist,vlist,num): try: #创建文件夹 os.mkdir("C:\\新浪热门话题") except: #如果文件夹存在则什么也不做 "" try: #创建文件用于存储爬取到的数据 with open("C:\\\\新浪热门话题\\\\新浪热门话题.txt","w") as f: for i in range(num): f.write("````````````````````````````````````````````````````````````````````````````\\n") f.write("排名:{}\\n".format(i+1)) f.write("标题:{}\\n".format(nlist[i])) f.write("阅读量:{}\\n".format(vlist[i])) except: "存储失败" #用来存储热点名称 nlist = [] #用来存储阅读量 vlist = [] #新浪热点话题链接 url = "https://d.weibo.com/231650?cfs=920&Pl_Discover_Pt6Rank__4_filter=&Pl_Discover_Pt6Rank__4_page=1#Pl_Discover_Pt6Rank__4" #获取HTML页面 html = getHTMLText(url) #将数据存在列表中 getData(nlist,vlist,html) #打印结果 printList(nlist,vlist,15) #存储数据 dataSave(nlist,vlist,15)
运行结果:
1.数据爬取与采集
#爬取页面 def getHTMLText(url): try: #假装成浏览器访问 kv = {\'Cookie\':\'SINAGLOBAL=4844987765259.994.1544506324942; \\ SUB=_2AkMqmKIaf8NxqwJRmPoVxWnmaIV-ygDEieKcxFPBJRMxHRl-yT9jqmc8tRB6ARiM9rPSLjsy2kCgBq61u7x2M9eTeKTA; \\ SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WFYIzVSU-rQ8YIqH5sJ2vs7; \\ login_sid_t=6f2f5ed24c4e1f2de505c160ca489c97; cross_origin_proto=SSL;\\ _s_tentry=www.baidu.com; UOR=,,www.baidu.com; Apache=9862472971727.955.1575730782698; \\ ULV=1575730782710:6:1:1:9862472971727.955.1575730782698:1569219490864; \\ YF-Page-G0=b7e3c62ec2c0b957a92ff634c16e7b3f|1575731639|1575731637\',\\ \'user-agent\':\'Mozilla/5.0\',\\ \'Accept\':\'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\'} #获取目标页面 r = requests.get(url,headers = kv) #判断页面是否链接成功 r.raise_for_status() #使用HTML页面内容中分析出的响应内容编码方式 #r.encoding = r.apparent_encoding #返回页面内容 return r.text except: #如果爬取失败,返回“爬取失败” return "爬取失败"
#爬取数据 def getData(nlist,vlist,html): #爬取新浪热门话题标题 flag = re.findall("alt=.{0,3}#.{1,15}#",html) #对标题进行清洗 for i in range(len(flag)): nlist.append(flag[i][5:]) #爬取话题浏览量 flag = re.findall(\'<span.{0,3}class=.{0,3}number.{0,3}>.{0,8}<.{0,3}span>\',html) #对浏览量进行清洗 for i in range(len(flag)): vlist.append(flag[i][23:-9]) return nlist,vlist
5.数据持久化
#数据存储 def dataSave(nlist,vlist,num): try: #创建文件夹 os.mkdir("C:\\新浪热门话题") except: #如果文件夹存在则什么也不做 "" try: #创建文件用于存储爬取到的数据 with open("C:\\\\新浪热门话题\\\\新浪热门话题.txt","w") as f: for i in range(num): f.write("````````````````````````````````````````````````````````````````````````````\\n") f.write("排名:{}\\n".format(i+1)) f.write("标题:{}\\n".format(nlist[i])) f.write("阅读量:{}\\n".format(vlist[i])) except: "存储失败"
四、结论(10分)
1.经过对主题数据的分析与可视化,可以得到哪些结论?
1.经过对主题数据的分析与可视化,可以得到哪些结论?
通过此次的爬取分析可以直观的看出微博热门话题的类型跟关注度。
2.对本次程序设计任务完成的情况做一个简单的小结。
2.对本次程序设计任务完成的情况做一个简单的小结。
通过此次的设计任务,加深了我对爬虫的理解和掌握,也进一步加强了我对爬虫的兴趣。
以上是关于Python高级应用程序设计任务的主要内容,如果未能解决你的问题,请参考以下文章