用python实现的一个简单的爬虫



在MOOC上学完了python的入门课程后,实现课后的一个小作业。

 对应的python的基础:

对之前学到的python的基础知识有了一个很好的回顾。用到的基本知识有:包的导入,类的定义,if语句,for语句,字典,列表,的操作,正则的应用,sort函数的应用,lambda表达式,map函数。

 

 小程序的效果:

可以爬取某直播平台分区下主播的姓名及观众的人数,并对爬取得数据进行排序。

import re #导入库
from urllib import request #导入库中的方法
#定义一个类
class Spider():
    url = 'https://www.panda.tv/cate/lol?pdt=1.24.s1.3.6mavo55dcno'
    root_pattern = '
([\s\S]*?)
' #其中的“?”表示的是非贪婪的匹配 name_pattern = '([\s\S]*?)' #用正则表达式来提取有效的信息 number_pattern = '([\s\S]*?)' def __fetch_content(self): r = request.urlopen(Spider.url) #打开链接 htmls = r.read() #读取链接的内容 htmls = str(htmls, encoding = 'utf-8') #将其转化为字符串 return htmls #对数据进行分析 def __analysis(self, htmls): root_html = re.findall(Spider.root_pattern,htmls) #用正则表达式提取字符串中有效的部分,root_html的类型是list anchors = [] #用for循环遍历list for html in root_html: name = re.findall(Spider.name_pattern, html) #用正则匹配有效名字 number = re.findall(Spider.number_pattern, html) #用正则匹配有效数字 anchor = {'name':name, 'number':number} #将信息封装成dict anchors.append(anchor) #将字典放进新的list return anchors #排序函数 def __sort(self, anchors): anchors = sorted(anchors, key= self.__sort_seed,reverse = True) return anchors #生成排序种子的函数 def __sort_seed(self, anchor): r = re.findall('\d*', anchor['number']) #正则匹配数字 number = float(r[0]) if '万' in anchor['number']: #对“万”进行区别处理 number *= 10000 return number #显示函数(排序结果) def __show(self, anchors): for anchor in anchors: print(anchor['name']+ '------'+anchor['number']) #精炼信息函数 def __refine(self, anchors): l = lambda anchor:{'name':anchor['name'][0].strip(), 'number':anchor['number'][0]} return map(l, anchors) #入口函数 def go(self): htmls = self.__fetch_content() anchors = self.__analysis(htmls) #print(anchors[8]) anchors = list(self.__refine(anchors)) anchors = self.__sort(anchors) self.__show(anchors) spider = Spider() spider.go()

 


学习的过程中,写写博客记录一下自己的学习过程!

ps:大周末的导师早上比我来的早,现在还在做实验。老师都这个年纪了,还这么拼!实在让我汗颜。

年轻人就是要干到底!

 

 

 

 

 

你可能感兴趣的:(Python)