首页新闻动态正文

Python学习:爬虫示例【黑马python培训】

更新时间:2019年07月26日 10时48分22秒 来源:黑马程序员论坛

本篇是在学习Python基础知识之后的一次小小尝试,这次将会爬取熊猫TV网页上的王者荣耀主播排名,在不借助第三方框架的情况下演示一个爬虫的原理。

一、实现Python爬虫的思路
第一步:明确目的
1.找到想要爬取数据的网页
2.分析网页结构,找到需要爬取数据所在的标签位置

第二步:模拟Http请求,提取数据,加工数据
1.模拟Http网络请求,向服务器发送请求,获取服务器返回给我们的html
2.使用正则表达式从Html中提取我们需要的数据(比如本例中的主播名字和人气)
3.对提取的数据进行加工,显示成我们可以直观查看的形式

二、查看网页源码,观察关键值
我们应该首先找到需要处理的网页,即:熊猫TV网页上的王者荣耀,然后查看这个网页的源代码,观察我们需要关注的数据在哪个位置,下面是我们截取的网页效果图:


然后,我们需要在浏览器中查看当前网页的Html源码,不同的浏览器中查看的操作会有所不同,这个需要自行百度一下。此次我们需要找到每个主播的名字和视频的浏览量,从源码中我们可以很快发现这些关键数据的位置如图中的标注:



三、实现Python爬虫的具体实践
下面就是实现爬取数据的具体操作了,这里是创建了一个爬虫类Spider,然后使用不同的正则获取Html标签里的数据,进而将其重新整理后打印显示,具体的代码如下:

from urllib import request   #导入模块urllib,用于发起网络请求,获取数据
import re                    #导入模块re,用于实现正则提取信息


class Spider():
    #需要抓取的网络链接
    url = "https://www.smpeizi.com/cate/kingglory"

    #正则:获取显示视频信息的div代码串
    reString_div = '<div class="video-info">([\s\S]*?)</div>'   
    #正则:获取主播名
    reString_name = '</i>([\s\S]*?)</span>'
    #正则:获取视频浏览量
    reString_number = '<span class="video-number">([\s\S]*?)</span>'


    def __fetch_content(self):
        '''
        这里是方法注释
        请求网络,获取整个网页的Hmtl字符串
        '''
        r = request.urlopen(Spider.url)
        data = r.read()
        htmlString = str(data,encoding="utf-8")
        return htmlString


    def __alalysis(self,htmlString):
        '''
        使用正则初步获取数据,得到主播信息(主播名和浏览量)的数组
        '''
        videoInfos = re.findall(Spider.reString_div,htmlString)
        anchors = []
        #print(videoInfos[0])
        for html in videoInfos :
            name = re.findall(Spider.reString_name,html)
            number = re.findall(Spider.reString_number,html)
            anchor = {"name":name,"number":number}
            anchors.append(anchor)
        #print(anchors[0])
        return anchors


    def __refine(self,anchors):
        '''
        将数据进一步提炼,去除空格等多余字符
        '''
        f = lambda anchor :{"name":anchor["name"][0].strip(),"number":anchor["number"][0]}
        newAnchors = https://www.aiidol.com/list(map(f,anchors))
        #print(newAnchors)
        return newAnchors


    def __sort(self,anchors):
        '''
        数据分析:排序浏览量从大到小
        '''
        anchors = sorted(anchors,key=self.__sort_seed,reverse = True)
        return anchors


    def __sort_seed(self,anchor):
        '''
        排序规则
        '''
        list_nums = re.findall('\d*',anchor["number"])
        number = https://www.idiancai.com/float(list_nums[0])
        if '万' in anchor["number"]:
            number = number * 10000
        return number


    def __show(self,anchors):
        '''
        展示数据,将已经排序好的数据打印出来
        '''
        for rank in range(0,len(anchors)):
            print("第" + str(rank+1) +"名:" + anchors[rank]["number"] + "\t"  + anchors[rank]["name"])


    def startRun(self):
       '''
       程序入口,开始运行爬虫
       '''
       htmlString = https://www.pzzs168.com/self.__fetch_content()
       anchors = self.__alalysis(htmlString)
       anchors = self.__refine(anchors)
       anchors  = self.__sort(anchors)
       self.__show(anchors)



#创建爬虫类,爬取数据
spider = Spider()
spider.startRun()

然后,我们将看到如下的打印效果:


推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程【点击播放】

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!