数据解析~

本文详细介绍了数据解析的三种方法:正则表达式、BeautifulSoup(BS4)和XPath。涵盖了它们的基本原理、解析步骤、环境安装及实际案例,包括网页内容的抓取、解析与存储。
摘要由CSDN通过智能技术生成

数据解析

分类:
1.正则表达式
2.bs4解析
3.xpath解析

原理概述:
解析的局部文本内容都会存储于标签之间或标签对应的属性中

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

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

①正则表达式
Ⅰ.常用正则表达式
在这里插入图片描述
Ⅱ.正则练习

import re
#####################################################################
#提取出python
key="javapythonc++php"
re.findall('python',key)[0]
#####################################################################
#提取出hello world
key="
hello world
"
re.findall('(.*)',key)[0]
#####################################################################
#提取155
string = '我喜欢身高为155的女孩'
re.findall('\d+',string)
#####################################################################
#提取出http://和https://
key='http://www.baidu.com and https://boob.com'
re.findall('https?://',key)
#####################################################################
#提取出hello
key='lalalahellohahah' #输出hello
re.findall('<[Hh][Tt][mM][lL]>(.*)',key)
#####################################################################
#提取出hit. 
key='bobo@hit.edu.com'#想要匹配到hit.
re.findall('h.*?\.',key)
#####################################################################
#匹配sas和saas
key='saas and sas and saaas'
re.findall('sa{1,2}s',key)
#####################################################################

关于正则表达式的项目案例:
需求1:爬取一张图片
①分析
在这里插入图片描述
②代码:

import requests

if __name__ == "__main__":
    # 如何爬取图片数据
    # 指定图片url
    url = 'https://pic.qiushibaike.com/article/image/AP98M8MVO5GTFUTM.jpg'
    # UA伪装
    headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                             'Chrome/92.0.4515.131 Safari/537.36'}
    # content返回的是二进制形式的图片数据
    # text(字符串)、content(二进制)、json()(对象)
    # 发送请求并获取响应数据
    img_data = requests.get(url=url, headers=headers).content
    # 持久化存储
    with open('./tupian.jpg', 'wb') as fp:
        fp.write(img_data)

③结果:
在这里插入图片描述
需求2:获取https://www.qiushibaike.com/article/124623347中的所有图片
①分析
在这里插入图片描述
九张图片是在如图所示框起来的div标签中,且图片格式一致

②代码

import requests
import re
import os

if __name__ == "__main__":
    # 创建一个文件夹用于保存所有的图片
    if not os.path.exists('./tupian'):
        os.mkdir('./tupian')
    # 指定页面url
    url = 'https://www.qiushibaike.com/article/124623347'
    # UA伪装
    headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                             'Chrome/92.0.4515.131 Safari/537.36'}
    # 使用通用爬虫对url对应的一整张页面进行爬取
    page_text = requests.get(url=url, headers=headers).text
    # 使用聚焦爬虫将页面中所有的图片进行爬取
    # 正则表达式,用来去验证其他的字符串
    img_url = re.compile(r'<img src="(.*?)" alt="这届网友太优秀了,哈">')
    # 前面字符串是规则(正则表达式),后面字符串是被校验的字符串
    img_list = re.findall(img_url, page_text)
    # print(img_list)
    for img in img_list:
        # 拼接出一个完整的图片url
        img = 'https:'+img
        # 请求到了图片的二进制数据
        img_data = requests.get(url=img, headers=headers).content
        # 生成图片名称
        img_name = img.split('/')[-1]
        # 图片存储的路径
        img_path = './tupian/'+img_name
        with open(img_path, 'wb') as fp:
            fp.write(img_data)
            print(img_name, '下载成功!')

③结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
②bs4解析:
Ⅰ.解析步骤:

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

Ⅱ.环境安装

  • pip install bs4
  • pip install lxml
    (lxml是一种解析器)

若安装时出错可能是安装源的问题
解决方法:

  • 需要将pip源设置为国内源,阿里源、豆瓣源、网易源等
    • windows
      (1)打开文件资源管理器(文件夹地址栏中)
      (2)地址栏上面输入 %appdata%
      (3)在这里面新建一个文件夹 pip
      (4)在pip文件夹里面新建一个文件叫做 pip.ini ,内容写如下即可
      [global]
      timeout = 6000
      index-url = https://mirrors.aliyun.com/pypi/simple/
      trusted-host = mirrors.aliyun.com
    • linux
      (1)cd ~
      (2)mkdir ~/.pip
      (3)vi ~/.pip/pip.conf
      (4)编辑内容,和windows一模一样
  • 需要安装:pip install bs4
    bs4在使用时候需要一个第三方库,把这个库也安装一下
    pip install lxml

Ⅲ.实例化BeautifulSoup对象:

  • 导入包 form bs4 import BeautifulSoup
  • 对象的实例化
    1.将本地的html文档中的数据加载到该对象中
    (需要拥有一个本地的html文档)
    以下过程中会用到的我的本地html文档
    <!DOCTYPE html>
    <html>
    <head>
             
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值