【爬虫】数据解析

综述

聚焦爬虫 : 爬取页面中指定的页面内容

  • 编码流程:

  • 指定url

  • 发起请求

  • 获取页面数据

  • 数据解析

  • 持久化存储

数据解析分类
  • 正则re
  • bs4
  • xpath(重点)(通用)
  • jsonpath
  • pyquery
数据解析解析原理概述
  • 解析局部的文本内容都会在标签之间,或者标签对应的属性中对应的属性中进行存储
  • 进行指定标签的定位
  • 提取标签之间的文本内容或者标签属性值

正则

可见正则笔记

爬取尤物网中的图片见同根文件夹

bs4

bs4原理

  • 实例化一个BeautifulSoup对象,将页面源码数据加载到该对象中
  • 通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取

创建BeautifulSoup对象

解析器有:lxml

本地:

soup = BeautifulSoup('本地的html文档路径','解析器')

网络:

soup = BeautifulSoup('页面源码数据','解析器')#页面数据可以是html文档,Page_text

BeautifulSoup对象

查找标签
soup.tagName

返回文档中找到的第一个标签

soup.find()

返回文档中找到的第一个标签

soup.find('tagName',attr='属性名',class_='属性名',)#还有其他属性可以指定
soup.find_all

返回文档中找到的所有标签,用法同find

soup.find_all('tagName',attr='123')
soup.select()
  • 返回文档中所有符合选择器(可以嵌套)的内容,返回的是一个列表

  • 选择器:

    1. 标签选择器:soup.select(‘标签’)

      soup.select('div')
       #返回所有的div标签
      
    2. 类选择器:soup.select(‘.class’)

      soup.select('.tang')
      #返回所有的class为tang的标签
      
    3. id选择器:soup.select(‘#id’)

    soup.select('#song')
    #返回所有的id为song的标签
    
    1. 层级选择器:
    • 空格代表多个层级
    • > 代表一个层级
soup.select('某种选择器(id,class,标签...选择器)')
#一层一层找
print(soup.select('.tang > ul > li > a')[0])
#li与a标签间可跳过多个层级
print(soup.select('.tang > ul > li a'))
获取标签之间的数据
#返回a标签的所有属性
soup.a.attrs
#返回a标签的href属性值
soup.a.attrs['href']
soup.a.get('href')#相比之下,get方法更加安全,如果没有href属性,返回None
#返回a标签的文本内容
soup.a.string#返回所有的文本内容,不包含子标签
soup.a.text#返回所有的文本内容,包含子标签
soup.a.get_text()#返回所有的文本内容,包含子标签,同text,get_text()可以传入参数处理文本

xpath

from lxml import etree

根据不同的xpath表达式定位到不同内容

创建etree对象

本地:

tree = etree.parse('FilePath')

网络:

etree= etree.HTML(page_text)

etree对象

.xpath()

定位标签,类似路径

定位语法

返回元素Element对象列表(不加解析语法)

/

开头:从根节点开始定位

间隔: 一个子层级

//

开头:从任意位置开始定位

间隔:全部子层级

[@attrName="attrValue"]

tag后:限定属性值

[Num]

tag后:索引定位(索引从1开始)

./

开头:表示以当前元素作为全目录

取值语法

返回解析后的列表

/text()与//text()

定位语句后:取文本。前者不包含子元素,后者包含

/@attrName

定位语句后:取属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值