python爬虫的定义和实践原理
发布于 4 年前 作者 taoren 4823 次浏览 来自 分享

1、爬虫的定义

网络爬虫是一种按照一定的规则自动爬取爬取网络信息的程序或者脚本。简单来说,网络爬虫就是就是根据一定的算法实现编程开发,主要通过URL实现数据的抓取和发掘。

爬虫的类型和原理

通用爬虫又称全网爬虫,爬行对象从一些初始URL扩充到整个网站。其实现的原理如图:

2、实现Python爬虫的思路

第一步:明确目的

1.找到想要爬取数据的网页

2.分析网页结构,找到需要爬取数据所在的标签位置

第二步:模拟Http请求,提取数据,加工数据

1.模拟Http网络请求,向服务器发送请求,获取服务器返回给我们的html

2.使用正则表达式从Html中提取我们需要的数据(比如本例中的主播名字和人气)

3.对提取的数据进行加工,显示成我们可以直观查看的形式


3、实现Python爬虫的具体实践

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

from urllib import request   #导入模块urllib,用于发起网络请求,获取数据

import re                    #导入模块re,用于实现正则提取信息


class Spider():

#需要抓取的网络链接

url = "https://www.16yun.cn"


#正则:获取显示视频信息的div代码串
reString_div = '([\s\S]*?)

'   
#正则:获取主播名
reString_name = '([\s\S]*?)'
#正则:获取视频浏览量
reString_number = '([\s\S]*?)'

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 = 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 = 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 = self.__fetch_content()
   anchors = self.__alalysis(htmlString)
   anchors = self.__refine(anchors)
   anchors  = self.__sort(anchors)
   self.__show(anchors)


#创建爬虫类,爬取数据

spider = Spider()

spider.startRun()


执行爬虫

1 回复

还能写python的东西??

回到顶部