爬虫一一解析篇

lvcham   ·   发表于 2022-03-17 15:51:55   ·   学习杂记

数据解析概念

爬取整张页面内容,将指定的局部数据进行提取,这个过程称为数据解析

数据解析原理

现象:解析的局部文本内容都会在标签之间或者标签对应的属性中进行存储
操作:1、进行指定标签的定位
      2、标签或者标签对应的属性中存储的数据进行提取(解析)

ps:数据解析是聚焦爬虫的核心部分,实际运用中,75%以上的需求数据都是聚焦爬虫完成的

聚焦爬虫

指定url
发起请求
获取响应数据
数据解析
持久化存储

数据解析分类

1、正则

    不教,掌控正式课程有,也可参考https://www.runoob.com/regexp/regexp-tutorial.html

2、bs4
    python独有的解析方式(靓汤)

    原理:1、实例化一个BeaufulSoup对象,并且将页面源码数据加载到该对象中
            2、通过调用BeaufulSoup对象中相关的属性或者方法进行标签定位和数据提取

    环境安装:
        pip install bs4
        pip install lxml

    如何实例化一个BeaufulSoup对象:

        from bs4 import BeaufulSoup
        对象的实例化:
            1、将本地的html文档中的数据加载到该对象中
                fp = open('./test.html','r',encodin='utf-8')
                soup = BeautifulSoup(fp,'lxml')
            2、将互联网上获取的页面源码加载到该对象中
                page_text = response.text
                soup = BeautifulSoup(page_text,'lxml')
        提供的拥有数据解析的方法和属性:
            1、soup.tagName 返回的是html第一次出现tagName对应的标签
            2、soup.find('tagName'):
                1、等同于 soup.tagName
                2、属性定位 soup.find(''div,class_/id/attr='song')
            3、soup.find_all('tagName'):返回符号要求的所有标签(列表)
            4、soup.select('某种选择器(id、class、标签、类...选择器)')返回的是一个列表
                特殊:层级选择器
                    1、soup.select('.tang>ul>li>a')表示一个层级
                    2、soup.select('.tang>ul a')空格表示多个层级
                    ps:特殊选择器其实还有“~”和“+”以及“:”,有兴趣可以去css了解

            5、获取标签之间的文本数据:
                soup.a.text/string/get_text()
                区别:    text/get_text():
                        获取某一个标签中所有的文本内容,即使内容不是直系,也就是父代标签可获取子代(非亲代亦可)标签内容
                    string:    
                        获取某一个标签中直系文本内容
            6、获取标签中属性值
                soup.a['href']
3、xpath(重点)

    最常用且最便捷高效的一种解析方式,通用性强。

    解析原理:
        1、实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
        2、调用etree对象中的xpath方法,结合表达式实现标签的定位和内容的捕获
    环境的安装:
        pip install lxml

    如何实例化一个etree对象:

        1、from lxml import etree

        2、对象的实例化:
            1、将本地的html文档中的数据加载到该对象中
                etree.parse(filePath)
            2、将互联网上获取的页面源码加载到该对象中
                etree.HTML('page_text')
            3、xpath('xpath表达式')
    xpath表达式

        1、/:表示的是从根节点开始定位,表示的是一个层级

        2、//:表示的是多个层级

        3、属性定位:tag[@attrName="attrValue"]
                ==> //div[@class="song"] 

        4、索引定位:tag[@attrName="attrValue"]/tag[Num] 索引值Num是从1开始的
                ==> //div[@class="song"]/p[3]

        5、取文本:
            /text() 获取标签中直系的文本内容
            //text() 获取标签中非直系的文本内容(所有文本内容)

        6、取属性:
            /@attrName  ==> /@src

PS:
上面内容由于安全策略,右尖括号被转义为&gt,请自行替换
附件有掌控安全社区新闻模块头像合集touxiangLibs,共计739个,可删,通过已有的爬虫即可获取

本篇文章是2020年Python爬虫全套课程(学完可做项目)(16P-28P)的个人学习笔记,本篇内容较多而且杂,内容侧重前端部分,请做好足够的耐心学习,本篇是承上启下的篇章,理论上可直接学习xpath,请务必学会xpath部分,不然后续学习将更加困难

打赏我,让我更有动力~

附件列表

爬虫教程2.zip   文件大小:9.539M (下载次数:2)

0 条回复   |  直到 2022-3-17 | 685 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.