Python高级应用程序设计任务

Python高级应用程序设计任务要求

用Python实现一个面向主题的网络爬虫程序,并完成以下内容:
(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台)

一、主题式网络爬虫设计方案(15分)

1.主题式网络爬虫名称

新浪微博热点话题爬虫。
2.主题式网络爬虫爬取的内容与数据特征分析

爬取新浪热点话题跟阅读量。
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)

先爬取页面的HTML,然后使用正则表达式爬取话题跟阅读量,再存在文件中。

二、主题页面的结构特征分析(15分)
1.主题页面的结构特征

页码在page=后面。

2.Htmls页面解析

我们想要的信息在script中,使用BeautifulSoup库只能爬取到script标签,难以对数据进行精确提取,所以我直接使用正则表达式进行爬取。

3.节点(标签)查找方法与遍历方法
(必要时画出节点树结构)
 使用re.findall()进行匹配。
三、网络爬虫程序设计(60分)
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后面提供输出结果的截图。

程序:

 1 import requests
 2 import os
 3 import re
 4
 5
 6
 7 #爬取页面
 8 def getHTMLText(url):
 9     try:
10         #假装成浏览器访问
11         kv = {‘Cookie‘:‘SINAGLOBAL=4844987765259.994.1544506324942; 12               SUB=_2AkMqmKIaf8NxqwJRmPoVxWnmaIV-ygDEieKcxFPBJRMxHRl-yT9jqmc8tRB6ARiM9rPSLjsy2kCgBq61u7x2M9eTeKTA; 13               SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WFYIzVSU-rQ8YIqH5sJ2vs7; 14               login_sid_t=6f2f5ed24c4e1f2de505c160ca489c97; cross_origin_proto=SSL;15               _s_tentry=www.baidu.com; UOR=,,www.baidu.com; Apache=9862472971727.955.1575730782698; 16               ULV=1575730782710:6:1:1:9862472971727.955.1575730782698:1569219490864; 17               YF-Page-G0=b7e3c62ec2c0b957a92ff634c16e7b3f|1575731639|1575731637‘,18               ‘user-agent‘:‘Mozilla/5.0‘,19              ‘Accept‘:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3‘}
20         #获取目标页面
21         r = requests.get(url,headers = kv)
22         #判断页面是否链接成功
23         r.raise_for_status()
24         #使用HTML页面内容中分析出的响应内容编码方式
25         #r.encoding = r.apparent_encoding
26         #返回页面内容
27         return r.text
28     except:
29         #如果爬取失败,返回“爬取失败”
30         return "爬取失败"
31
32 #爬取数据
33 def getData(nlist,vlist,html):
34     #爬取新浪热门话题标题
35     flag = re.findall("alt=.{0,3}#.{1,15}#",html)
36     #对标题进行清洗
37     for i in range(len(flag)):
38         nlist.append(flag[i][5:])
39     #爬取话题浏览量
40     flag = re.findall(‘<span.{0,3}class=.{0,3}number.{0,3}>.{0,8}<.{0,3}span>‘,html)
41     #对浏览量进行清洗
42     for i in range(len(flag)):
43         vlist.append(flag[i][23:-9])
44     return nlist,vlist
45
46 #打印结果
47 def printList(nlist,vlist,num):
48     for i in range(num):
49         print("````````````````````````````````````````````````````````````````````````````")
50         print("排名:{}".format(i+1))
51         print("标题:{}".format(nlist[i]))
52         print("阅读量:{}".format(vlist[i]))
53
54 #数据存储
55 def dataSave(nlist,vlist,num):
56     try:
57          #创建文件夹
58         os.mkdir("C:\新浪热门话题")
59     except:
60         #如果文件夹存在则什么也不做
61         ""
62     try:
63         #创建文件用于存储爬取到的数据
64         with open("C:\\新浪热门话题\\新浪热门话题.txt","w") as f:
65             for i in range(num):
66                 f.write("````````````````````````````````````````````````````````````````````````````\n")
67                 f.write("排名:{}\n".format(i+1))
68                 f.write("标题:{}\n".format(nlist[i]))
69                 f.write("阅读量:{}\n".format(vlist[i]))
70     except:
71         "存储失败"
72
73 nlist = []
74 vlist = []
75 #新浪热点话题链接
76 url = "https://d.weibo.com/231650?cfs=920&Pl_Discover_Pt6Rank__4_filter=&Pl_Discover_Pt6Rank__4_page=1#Pl_Discover_Pt6Rank__4"
77 #获取HTML页面
78 html = getHTMLText(url)
79 #将数据存在列表中
80 getData(nlist,vlist,html)
81 #打印结果
82 printList(nlist,vlist,15)
83 #存储数据
84 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 "爬取失败"

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

#爬取数据
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.经过对主题数据的分析与可视化,可以得到哪些结论?

通过此次的爬取分析可以直观的看出微博热门话题的类型跟关注度。
2.对本次程序设计任务完成的情况做一个简单的小结。

通过此次的设计任务,加深了我对爬虫的理解和掌握,也进一步加强了我对爬虫的兴趣。

原文地址:https://www.cnblogs.com/tyr-1215/p/12019473.html

时间: 2024-08-03 14:09:14

Python高级应用程序设计任务的相关文章

Python高级应用程序设计

Python高级应用程序设计任务要求 用Python实现一个面向主题的网络爬虫程序,并完成以下内容:(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台) 一.主题式网络爬虫设计方案(15分) 1.主题式网络爬虫名称 名称:爬取视频网站中的电影排名信息2.主题式网络爬虫爬取的内容与数据特征分析 本次爬虫主要爬取各个视频网站中的电影排名以及评分3.主题式网络爬虫设计方案概述(包括实现思路与技术难点) 本次设计方案主要依靠request库对目标页面进行信息的爬取采集,再用Beauti

Python 高级应用程序设计任务

一.主题式网络爬虫设计方案 1.主题式网络爬虫的名称 1.1链家网站的爬取 2,主题式网络爬虫的内容与数据特征分析 2.1爬虫的内容 房源信息的名称,小区名称,价格,楼层,代理人,单价,发布时间. 2.2 数据特征分析 2.2.1对楼层做一个词云并可视化 2.2.2对发布时间做一个折线图 3,主题式网络爬虫设计方案概述(包括实现思路和技术难点) 3.1实现思路 创建一个get的类,定义get_alldata()方法用来获取网页上的全部信息,get_detail()方法用来对整数数据的进一步加工和

Python高级应用程序设计任务要求

1.案例内容简介 易车网新车信息的爬取 内容步骤: 爬取,解析(动态requests+ajax/selenium),清洗,持久化(mysql),可视化(seaborn) 2.案例分析与设计 (1) 系统框架 整个框架分为六个模块:爬虫调度器.URL管理器.HTML下载器.HTML解析器.数据存储器.数据可视化 (2) 数据库设计 用于记录奥迪汽车信息 表ad_data id Int 自增主键 name Varchar(255) 汽车名称 time_to_market Varchar(255) 上

Python高级应用程序设计任务要求(主题链家二手车)

内容简介 链家二手房成交信息(福州) 本文主要使用了multiprocessing模块创建多个进程对象,使用Queue将多个进程联系在一起,也就是线程之间的通信多个对链家的二手房进行数据的爬取,处理,存储等操作. 结构:主从模式: 主控制节点 从爬虫节点 分析与设计 系统主要核心有两大调度器 1.控制调度器 主要负责管理三个进程:一:负责将地址传递给爬虫节点,二:负责读取爬虫节点返回的数据,三:负责将数据提取进程中提交的数据进行数据持久化 2.爬虫调度器 爬虫节点主要是包括两个功能,下载html

三.python高级

三.python高级 1.元类 1.1 Python 中类方法.类实例方法.静态方法有何区别? 类方法:是类对象的方法,在定义时需要在上方使用@classmethod进行装饰,形参为cls,表示类对象,类对象和实例对象都可调用: 类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为 self,指代对象本身: 静态方法:是一个任意函数,在其上方使用@staticmethod进行装饰,可以用对象直接调用, 静态方法实际上跟该类没有太大关系 2.内存管理与垃圾回收机制 2.1 Python

面试题--python高级

第三章Python 高级 一.元类 1.Python 中类方法.类实例方法.静态方法有何区别?(2018-3-30-lxy) 类方法:是类对象的方法,在定义时需要在上方使用"@classmethod"进行装饰,形参为cls, 表示类对象,类对象和实例对象都可调用: 类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为self,指代对象本身: 静态方法:是一个任意函数,在其上方使用"@staticmethod"进行装饰,可以用对象直接调用, 静态方法实际上跟

python高级编程之(类级):子类内建类型

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #类级 #在2.2中,提出了类型(type0与类(class)统一(请访问:https://www.python.org/download/releases/2.2.3/descintro(可能已经不存在了))-这使内建类型的子类化成为可能,并且添加一个新内建类型object #用于所有内建类的公共祖先 #展示一个名为distinctdict类的代码,与平常的dic

51CTO学院Python高级自动化开发工程师微职位学员自我介绍

51CTO学院Python高级自动化开发工程师微职位 自我介绍及学习宣言 亲爱的小伙伴:欢迎大家报名51CTO学院&老男孩Alex Python高级自动化开发工程师微职位学习,跟随alex.武sir学习屌炸天的python技术,成就技术大牛之梦.为了督促大家一直积极认真努力的学习,请各位同学在跟帖写出你的自我介绍.学习宣言,不忘初心,一直跟着老师一步一个脚印,扎扎实实学本领. 跟帖格式:我是xxx,我参加了51CTO学院&老男孩Alex Python高级自动化开发工程师微职位学习,从201

python高级编程:有用的设计模式2

# -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一个代价昂贵或者远程的资源提供了一个非直接访问的机制 在客户和主意之间,如图.它用来优化对高代价主题的访问,比如,在前一章中描述的memoize装饰器可以被认为是一个代理 ,它还可以用提供到一个主题智能访问,例如,大的视频文件可以封闭在代理中,以避免在用户仅仅请教其标题时就将文件载入到内存中 urllib2出给