码迷,mamicode.com
首页 > 其他好文 > 详细

requests模块-数据解析

时间:2020-06-09 12:49:24      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:eve   sele   正则表达式   for   数据加载   标签   模块   request   get   

requests模块数据解析

数据解析最根本的作用:定位到某个标签,并获取该标签的文本或者属性

解析:根据指定的规则对数据进行提取

作用:实现聚焦爬虫

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

数据解析的方式:
正则
bs4
xpath
通用原理:
1.标签定位
2.取文本or取属性

正则解析

使用re模块,加上正则匹配规则

获取到爬取下来的页面数据后,进行正则解析:

1.编写要匹配的正则表达式

# 要获取数据的位置
ex = ‘<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>‘

2.使用re模块进行匹配

# 数据解析使用正则是一定要带上re.S参数,防止回车换行造成的影响
img_src_list = re.findall(ex, page_text, re.S)

注意点:re模块正则匹配时,一定要带上re.S参数,是为了防止回车换行符造成的影响

3.对获取的数据进行处理,可能还要再次发起请求,最后持久化存储得到的内容

for src in img_src_list:
    src = ‘https:‘ + src
    img_name = src.split(‘/‘)[-1]
    img_path = dir_name + ‘/‘ + img_name

    # 对图片地址单独发起请求获取图片数据
    request.urlretrieve(src, img_path)

    print(img_name, ‘下载成功!!!‘)
import requests

import re
import os
from urllib import request

headers = {
    ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36‘
}

# 创建存放爬取下来图片的存放目录
dir_name = ‘./qiutuLibs‘
if not os.path.exists(dir_name):
    os.mkdir(dir_name)

url = ‘https://www.qiushibaike.com/pic/‘

page_text = requests.get(url, headers=headers).text

# 数据解析:图片地址
# 正则表达式
ex = ‘<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>‘

# 数据解析使用正则是一定要带上re.S参数,防止回车换行造成的影响
img_src_list = re.findall(ex, page_text, re.S)

for src in img_src_list:
    src = ‘https:‘ + src
    img_name = src.split(‘/‘)[-1]
    img_path = dir_name + ‘/‘ + img_name

    # 对图片地址单独发起请求获取图片数据
    request.urlretrieve(src, img_path)

    print(img_name, ‘下载成功!!!‘)

bs4解析

环境的安装:

? pip install bs4
? pip install lxml

bs4的解析原理

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

from bs4 import BeautifulSoup

soup = BeautifulSoup(page_text,‘lxml‘)

BeautifulSoup对象实例化:

? BeautifulSoup(fp,‘lxml‘):专门用作于解析本地存储的html文档中的数据

? BeautifulSoup(page_text,‘lxml‘):专门用作于将互联网上请求到的页面源码数据进行解析

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

标签定位

? soup.tagName:定位到第一个TagName标签,返回的是单个数据

属性定位

? soup.find(‘tagName‘,attrName=‘value‘),返回也是单个数据

? find_all:和find用法一致,但是返回值是列表

选择器定位

? select(‘选择器‘),返回值为列表

? 标签,类,id,层级(‘>‘:一个层级,‘空格‘:多个层级)

提取数据

? 取文本
? tag.string:标签中直系的文本内容
? tag.text:标签中所有的文本内容
? 取属性
? tag[‘attrName‘]

xpath解析

环境的安装:

pip install lxml

xpath的解析原理

1.实例化一个etree类型的对象,且将页面源码数据加载到该对象中

from lxml import etree

tree = etree.parse(filename) # 本地的html文件

tree = etree.HTML(page_text) # 网络爬取的html数据

etree对象的实例化
etree.parse(fileNane) 本地html文件
etree.HTML(page_text) 网络爬取的HTML文件

2.需要调用该对象的xpath方法,

结合着不同形式的xpath表达式进行标签定位和数据提取

注意点:xpath方法返回的永远是一个列表

标签定位

  在xpath表达式中最最侧的/表示的含义是说,当前定位的标签必须从根节点开始进行定位
  
  xpath表达式中最左侧的//表示可以从任意位置进行标签定位

  xpath表达式中非最左侧的//表示的是多个层级的意思

  xpath表达式中非最左侧的/表示的是一个层级的意思

属性定位

? //tagName[@arrtName=‘value‘]

索引定位

? //tagName/li[3]

提取数据

取文本:
/text():取直系的文本内容
//text():取所有的文本内容
取属性:
tag/@attrName

requests模块-数据解析

标签:eve   sele   正则表达式   for   数据加载   标签   模块   request   get   

原文地址:https://www.cnblogs.com/Hedger-Lee/p/13071701.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!