爬虫-数据解析-bs4
1.数据解析
解析: 根据指定的规则对数据进行提取
作用: 实现聚焦爬虫
数据解析方式:
- 正则表达式
- bs4
- xpath
数据解析的通用原理:
数据解析需要作用在页面源码中(一组html标签组成的)
html:的核心作用是展示数据
通用原理:
- 标签定位
- 获取文本或者属性
正则表达式实现数据解析
# 需求:爬取糗事百科中糗图数据
import requests
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'
} #方式1:
url = 'https://pic.qiushibaike.com/system/pictures/12217/122176396/medium/OM37E794HBL3OFFF.jpg'
img_data = requests.get(url=url,headers=headers).content #content返回的是byte类型的数据
with open('./123.jpg','wb') as fp:
fp.write(img_data) #方式2:
from urllib import request
url = 'https://pic.qiushibaike.com/system/pictures/12217/122176396/medium/OM37E794HBL3OFFF.jpg'
request.urlretrieve(url,'./456.jpg') - 方式2不可以使用UA伪装的机制 - urllib就是一个比较老的网络请求的模块,在requests模块没有出现之前,请求发送的操作使用的都是urllib
2.bs4 解析模块
模块安装 :
- pip install bs4
- pip install lxml
bs4 的解析原理
- 实例化一个beautifulSoup的对象,并且将即将被解析的源码数据加载到该对象中
- 调用beautifulSoup对象中的相关属性和方法继续宁标签定位和数据提取
如何实例化BeautifulSoup对象
BeautifulSoup(fp,'lxml'):专门用作于解析本地存储的html文档中的数据
from bs4 import BeautifulSoup
fp = open('./test.html','r',encoding='utf-8')
soup = BeautifulSoup(fp,'lxml') #将即将被解析的页面源码加载到该对象中
BeautifulSoup(page_text,'lxml'):专门用作于将互联网上请求到的页面源码数据进行解析
标签定位:
soup = BeautifulSoup(page_text,'lxml') 实例化一个对象
soup.tagName:定位到第一个TagName标签,返回的是单数
属性定位:soup.find('tagName',attrName='value'),返回也是单数
- find_all:和find用法一致,但是返回值是列表
选择器定位:select('选择器'),返回值为列表
- 标签选择器,类选择器,id选择器,层级选择器(>:一个层级,空格:多个层级)
from bs4 import BeautifulSoup
fp = open('./test.html','r',encoding='utf-8')
soup = BeautifulSoup(fp,'lxml') #将即将被解析的页面源码加载到该对象中
soup.p
soup.find('div',class_='song')
soup.find_all('div',class_='song')
soup.select('.tang')
soup.select('#feng')
soup.select('.tang > ul > li')
soup.select('.tang li')
li_6 = soup.select('.tang > ul > li')[6]
i_tag = li_6.i
i_tag.string
soup.find('div',class_='tang').text
soup.find('a',id="feng")['href']
提取数据
- 取文本:
- tag.string:标签中直系的文本内容(只提取直系内的文本)
- tag.text:标签中所有的文本内容
- 取属性:
- tag['attrName']
# 爬取三国演义整篇小说内容http://www.shicimingju.com/book/sanguoyanyi.html url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
page_text = requests.get(url,headers=headers).text
soup = BeautifulSoup(page_text,'lxml')
a_list = soup.select('.book-mulu > ul > li > a')
fp = open('sanguo.txt','w',encoding='utf-8')
for a in a_list:
detail_url = 'http://www.shicimingju.com'+a['href']
chap_title = a.string
#对章节详情页的url发起请求,解析详情页中的章节内容
detail_page_text = requests.get(detail_url,headers=headers).text
soup = BeautifulSoup(detail_page_text,'lxml')
chap_content = soup.find('div',class_="chapter_content").text
fp.write(chap_title+':'+chap_content+'\n')
print(chap_title,'爬取成功!')
fp.close()
- 取文本:
爬虫-数据解析-bs4的更多相关文章
- python爬虫--数据解析
数据解析 什么是数据解析及作用 概念:就是将一组数据中的局部数据进行提取 作用:来实现聚焦爬虫 数据解析的通用原理 标签定位 取文本或者属性 正则解析 正则回顾 单字符: . : 除换行以外所有字符 ...
- 070.Python聚焦爬虫数据解析
一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...
- python爬虫数据解析之BeautifulSoup
BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...
- python爬虫数据解析的四种不同选择器Xpath,Beautiful Soup,pyquery,re
这里主要是做一个关于数据爬取以后的数据解析功能的整合,方便查阅,以防混淆 主要讲到的技术有Xpath,BeautifulSoup,PyQuery,re(正则) 首先举出两个作示例的代码,方便后面举例 ...
- Python网络爬虫数据解析的三种方式
request实现数据爬取的流程: 指定url 基于request发起请求 获取响应的数据 数据解析 持久化存储 1.正则解析: 常用的正则回顾:https://www.cnblogs.com/wqz ...
- 爬虫-数据解析-xpath
xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的x ...
- python爬虫数据解析之正则表达式
爬虫的一般分为四步,第二个步骤就是对爬取的数据进行解析. python爬虫一般使用三种解析方式,一正则表达式,二xpath,三BeautifulSoup. 这篇博客主要记录下正则表达式的使用. 正则表 ...
- 02 爬虫数据解析之re,xpath,beautifulsoup
一.正则匹配 简单用法演示: 字符: print(re.findall(".","abccc31223dn哈哈")) ### . 匹配除了换行符以外的任意字符, ...
- python爬虫数据解析之xpath
xpath是一门在xml文档中查找信息的语言.xpath可以用来在xml文档中对元素和属性进行遍历. 在xpath中,有7中类型的节点,元素,属性,文本,命名空间,处理指令,注释及根节点. 节点 首先 ...
随机推荐
- 十大经典排序算法(java实现、配图解,附源码)
前言: 本文章主要是讲解我个人在学习Java开发环境的排序算法时做的一些准备,以及个人的心得体会,汇集成本篇文章,作为自己对排序算法理解的总结与笔记. 内容主要是关于十大经典排序算法的简介.原理.动静 ...
- 案例三:shell统计ip访问情况并分析访问日志
题目要求 有日志 1.log,部分内容如下: 112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com"/secco ...
- 使用 Postman 的 Environments 和 Tests 简化在不同环境中的切换步骤
调试 API 的时候,我们需要经常需要在本地.开发.生产来回切换,还需要面临 Token 失效等的问题,让人头大,看到一些教程有介绍用 Postman 来简化流程,但是实践起来还是遇到一些问题,所以就 ...
- 在vs2022环境中用C#创建COM组件
规则 com组件以接口的方式对外开放. 1:所要导出的类必须为公有: 2:所有属性.方法也必须为公有: 3:要导出的属性.方法必须用接口方式: interface IName { [DispId(1) ...
- 【windows 访问控制】十一、C# 实操 对象 System.Security.AccessControl 命名空间
AccessControl 命名空间 结构图 解说: DirectorySecurity=目录ACLFileSecurity=文件ACLFileSystemAuditRule=目录和文件中SACL中的 ...
- 微服务从代码到k8s部署应有尽有系列(九、事务精讲)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- Mybatis学习笔记(详细)
介绍 三层架构:视图层.业务逻辑层.持久层 mybatis框架: 执行数据库操作,完成对数据库的增删改查,封装了jdbc mapper映射,将表中数据转为一个Java对象,一个表对应一个接口 Myba ...
- idea教程--面板介绍
面板说明
- 基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
在我的各种开发框架中,数据访问有的基于微软企业库,有的基于EFCore的实体框架,两者各有其应用场景,不过多的去比较.最近在使用SqlSugar的时候,觉得这个数据访问处理的组件确实很灵活,据说性能也 ...
- pandas 中dataframe的操作
先用pandas生成数据, import numpy as npimport pandas as pddf= pd.DataFrame(np.arange(30).reshape(6,5),colum ...