requests模块-数据解析
Posted hedger-lee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests模块-数据解析相关的知识,希望对你有一定的参考价值。
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模块-数据解析的主要内容,如果未能解决你的问题,请参考以下文章
Urllib库基本使用详解(爬虫,urlopen,request,代理ip的使用,cookie解析,异常处理,URL深入解析)