综述
聚焦爬虫 : 爬取页面中指定的页面内容
-
编码流程:
-
指定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()
-
返回文档中所有符合选择器(可以嵌套)的内容,返回的是一个列表
-
选择器:
-
标签选择器:soup.select(‘标签’)
soup.select('div') #返回所有的div标签 -
类选择器:soup.select(‘.class’)
soup.select('.tang') #返回所有的class为tang的标签 -
id选择器:soup.select(‘#id’)
soup.select('#song') #返回所有的id为song的标签- 层级选择器:
- 空格代表多个层级
- > 代表一个层级
-
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
定位语句后:取属性
1066

被折叠的 条评论
为什么被折叠?



