用python基础语法简单写个原生小爬虫获取主播排名(中)

这段时间一直在忙着个人项目,今晚终于挤出点时间继续写了。废话少说,接着上一篇的内容继续开讲!

五、转化内容

接下来我们要对获取url的方法进行一些改造

    def __get_content:(self):
        r = request.urlopen(Spider.url)
        htmls = r.read()
        htmls = str(htmls,encoding = 'utf-8')
#目的是把收集回来的html内容转化成str字符串类型,因为从网上爬回来的数据一开始全是字节来的

六、分析获取的文本

#再新建一个__analysis()方法,来分析匹配收集回来的一堆字符,记得把HTML传进去
    def __analysis(self,htmls):
        pass

另外,最重要的是,要把上一篇中第二部自己找到的标签先放到class下方便调用:

class Spider():
    url = 'https://www.panda.tv/cate/pubg?pdt=1.24.s1.18.3nd8ke922g2'
    root_pattern = '<div class="video-info">([\s\S]*?)</div>'
    name_pattern = '</i>([\s\S]*?)</span>'
    number_pattern = '<span class="video-number">([\s\S]*?)</span>'
#在上一篇第二部也说明了,我要抓取的主播姓名和人数排名都蕴含在<div class="video-info">
#这个标签里面,而主播(name_pattern)名字又恰好在</i>和</span>之间,人数也是同样道理
#这里如果大家爬的不是熊猫tv,那么就很考验大家的标签抓取能力了。
#至于中间的正则表达式,其实很简单[\s\S]*?意思是匹配所有字符,因为要多次匹配所以加上*

此外,别忘了,在run方法中,加上新建的__analysis(),虽然它还没写完,但是这是个好习惯。之后每新建一个函数,都应该及时加到run中。

def run(self):
    htmls = self.__get_content()
   #别忘了,analysis要在get_content中的到的htmls里分析数据的,所以把htmls赋值吧
    self.__analysis(htmls)

七、利用正则表达式匹配

接下来,开始写analysis的方法进行抽取自己想要的数据:

def __analysis(self, htmls):
        root_html = re.findall(Spider.root_pattern, htmls)
 #首先创建个对象按规则接收我们要从htmls里需要的东西,规则就是之前在class下写好的
 #'name_pattern'和'number_pattern'
        anchors = []      #创建一个空列表用来接收待会匹配出来的值
        for html in root_html:      #利用for循环,把root_html里的值按规则匹配出来
            name = re.findall(Spider.name_pattern, html)   #这是所有主播的名字
            number = re.findall(Spider.number_pattern, html) #这是所有观看人数
            anchor = {'name':name, 'number':number}    #用一个字典把它们接收
            anchors.append(anchor)    #最后把结果加入到空列表anchors中
       return anchors

其实写到这里,爬虫的主要目的已经完成了!我们已经拿到了自己想要的数据,就在anchors这个列表里面,只不过它里面是一团糟呢,下一篇会继续讲如何精炼自己爬取的数据,并排序展示。

猜你喜欢

转载自blog.csdn.net/weixin_42833042/article/details/82635008