欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python爬虫—数据解析技术使用教程

程序员文章站 2022-09-21 09:03:08
1. 聚焦爬虫:爬取页面中指定的页面内容。编码流程:指定url发起请求获取响应数据数据解析持久化存储2. 数据解析分类:正则解析:应用案例 python爬虫——糗事百科多页面上的图片获取bs4(仅能被应用于python语言中):实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中。通过调用BeautifulSoup对象中相关的属性或者方法,进行标签定位和数据提取。所需环境:pip install bs4pip install l...



1. 聚焦爬虫

爬取页面中指定的页面内容。

  • 编码流程:
    • 指定url
    • 发起请求
    • 获取响应数据
    • 数据解析
    • 持久化存储

2. 数据解析分类

  1. 实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中。

  2. 通过调用BeautifulSoup对象中相关的属性或者方法,进行标签定位和数据提取。

  3. 所需环境:
    pip install bs4
    pip install lxml

  4. 实例化BeautifulSoup对象:

    a. 导包

    from bs4 import BeautifulSoup

    b. 对象的实例化

    (1)将本地的html文档中的数据加载到该对象中

    with open('./test.html','r',encoding='utf-8') as fp: soup = BeautifulSoup(fp,'lxml') print(soup) 

    (2)将互联网上获取的页面源码加载到该对象中

     page_text = response.text
    	soup = BeautifulSoup(page_text,'lxml') 

    c. 提供用于数据解析的方法和属性

    1. 标签定位的方法

    find()方法

    方法 作用
    soup.tagName 返回的是文档中第一次出现的tagName对应的标签。
    soup.find() 1. soup.find(‘tagName’) 等同于soup.tagName
    soup.find() 2.属性定位:soup.find(‘tagName’,属性_=‘参数值’)。例如:soup.find(‘div’,class_=‘head_wrapper’)
    soup.find_all(‘tagName’) 返回符合要求的所有标签(列表)

    select方法

    方法 作用
    select(‘某种选择器(id,class,标签…选择器)’) 返回的是一个列表
    soup.select(’.标签class的参数值 > 下一级标签名 > 再下一级标签名’) 层级选择器,可获取指定层的所有标签,返回的是一个列表。其中,“>”表示的是一个层级。例如:soup.select(’.tang > ul > li > a’)
    soup.select(’.标签class的参数值 > 下一级标签名 再下一级标签名’) 层级选择器,可获取跨层级的所有标签,返回的是一个列表。其中,空格表示的是多个层级。例如:soup.select(’.tang > ul a’)

    注:若想获得soup.select(’.tang > ul > li > a’) 中的指定的标签,可使用列表操作,例如:soup.select(’.tang > ul > li > a’)[0]


    2. 获取标签之间文本数据的方法

    结合上述标签定位方法,在后面再加上text/string/get_text()方法即可。例如: soup.a.text/string/get_text()

  • text/get_text():可获得标签中,所有的文本内容。即使不属于该标签直系的文本内容也可以获取。

  • string:只可以获取该标签下面直系的文本内容。

    3. 获取标签中属性值

    例如:soup.a[‘href’],soup.select(’.tang > ul a’)[0][‘href’]


最常用且最便捷高效的一种解析方式

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

  • 如何实例化一个etree对象:
    从lxml中导入etreee from lxml import etree

  1. 将本地的html文档中的源码数据加载到etree对象中:
    etree.parse(filePath)
  2. 可以将从互联网上获取的源码数据加载到该对象中:
    etree.HTML(‘page_text’)
  3. xpath(‘xpath表达式’):
    (1) “/”:表示的是从根节点开始定位,代表一个层级。例如:tree.xpath(’/html/head/title’)
    (2)"//":表示的是多个层级。可以表示从任意位置开始。例如:tree.xpath(’/html//title’)、tree.xpath(’//title’)
    (3)属性定位://div[@class=‘s_tab’]
    (4)索引定位://div[@class=“song”]/p[3]
    注:索引是从1开始的不是从0.
    (5)取文本:
    - /text(): 获取的是标签中直系的文本内容
    例如:tree.xpath(’//div[@class=“tang”]//li[5]/a/text()’)[0]
    - //text():标签中非直系的文本内容
    例如:tree.xpath(’//li[7]//text()’)
    (6)取属性:
    /@attrName
    例如:tree.xpath(’//div[@class=“song”]/img/@src’)

3. 数据解析原理概述

解析的局部文本内容都会在标签之间或者标签对应的属性中进行存储。

  • 步骤:
    1. 进行指定标签的定位
    2. 标签或者标签对应的属性中存储的数据值进行提取(解析)

本文地址:https://blog.csdn.net/qq_41094332/article/details/108253236