深入解析爬虫数据提取:聚焦爬虫与正则表达式应用指南
对于爬虫中的数据分析,简单的理解就是从一般爬虫得到的响应数据中进一步提取出一些我们需要的特定数据,比如一段文字或者一张图片。聚焦爬虫:抓取页面中指定的页面内容。
——编码过程
1.指定网址
2.发起请求
3. 获取响应数据
4. 数据分析
5. 持久化存储
数据分析分类:
- 常规的
——BS4
——xpath(***通用)
数据分析原理:
——解析后的本地文本内容会存储在标签之间或者标签对应的属性中。
——1.定位指定标签
——2.提取(解析)标签或标签对应属性中存储的数据值
用于数据分析的正则表达式
正则表达式:
可以看作是通配符的增强版,用于匹配规则指定的字符串。
——预选赛
1. ?:表示前一个字符出现0次或1次
2. *:代表匹配0个或多个前面的字符
3.+:表示匹配前一个出现多次的字符
4. {…}:指定前一个字符出现的次数。例如,{2,6} 表示出现 2 到 6 次,{2,} 表示出现 2 次以上。
注意:以上四种方法都是针对单个字符。如果要定位多个字符,可以使用 () 将目标字符串括起来。
——”或“运算符(…|…)
例如(cat|dog),意思是匹配猫或狗
——字符类 ( )
1、[…]+方括号内的内容表示需要匹配的字符只能从中取出。
2. 可以在方括号中指定字符范围。例如+代表全部小写英文字母; +代表所有英文字母
3. 如果在方括号前添加“^”,则表示需要匹配尖号后面列出的字符以外的字符。如[^0-9]+,代表所有非数字字符
——元字符(Meta-)
正则表达式中的大多数元字符都以反斜杠开头。
d:代表数字字符
https://img2.baidu.com/it/u=358734066,1261933798&fm=253&fmt=JPEG&app=138&f=JPEG?w=500&h=749
w:代表单词字符(所有英文字符、数字、下划线)
s:表示空白字符(包括Tab(制表符)和换行符)
D:代表非数字字符
W:代表非单词字符
S:代表非空白字符
句点.:代表任意字符,但不包括换行符
特殊字符:^ 匹配行首,$ 匹配行尾
例如,^a 只会匹配行首的 a,a$ 只会匹配行尾的 a。
——贪婪与懒惰相配
贪心匹配:正则表达式中的*+{}在匹配字符串时默认会匹配尽可能多的字符。例如,.+ 表示任何单个字符匹配多次。
惰性匹配:.+?表示条件只匹配一次
数据分析bs4
bs4数据分析原理:
——1.实例化一个对象,并将页面源码数据加载到该对象中
——2.通过调用对象中的相关属性或方法来进行标签定位和数据提取
如何实例化一个对象:
——摘自BS4
——对象的实例化:
1.将本地html文档中的数据加载到对象中
fp = open('./.html','r',='utf-8')
汤=(fp,'lxml')
2.将从网上获取的页面源码加载到对象中
= .text
汤=(,'lxml')
用于数据解析的方法和属性(即标签名称):
——soup.:返回html中第一次出现的对应标签
——soup.find(参数):
1.find(''):相当于汤。
2、属性定位:标签可以根据具体属性进行定位。语法如下:
汤.find('div',='')
——soup.(''):返回所有符合要求的标签(列表)
——汤。(参数)
1.('某种选择器(id,class,label...)'),返回一个列表
2. 电平选择器:
(1)
汤.('.tang > ul > li > a')
:> 代表一个级别
(2)
汤。('.tang > ul a')
: 空格表示多个级别
https://img2.baidu.com/it/u=466507085,1379071439&fm=253&fmt=JPEG&app=120&f=JPEG?w=800&h=1067
如何获取标签之间的文本数据:
——汤..text //()
text/():可以获取一个标签内的所有文本内容
:只能获取该标签下的直接文本内容
如何获取属性值:
汤。['属性名称']
数据分析xpath
这种方法是最常用、方便、高效的方法。
Xpath解析原理:
——1.实例化一个etree对象,并将需要解析的页面源码数据加载到该对象中。
——2.调用etree对象中的xpath方法,与xpath表达式结合,实现标签定位和内容提取。
如何实例化 etree 对象:来自 lxml etree
——1.将本地HTML文档中的源代码数据加载到etree对象中,如
etree.parse()
——2.从网上获取的源代码数据可以加载到对象中,例如
etree.HTML('')
xpath表达式(级别选择)(返回列表)
——/:放在标签前面,表示从根节点开始定位。放置在标签之间代表层次结构。
——//:放在标签之间表示多级(效果相当于bs4中()方法中的空格),放在单个标签之前表示从任意位置定位(例如'//div'表示定位所有 div 标签)
——属性定位:例如
tree.xpath('//div[@class="song"]')
,表示定位标签名为div,属性名为class,值为song。
——索引定位:例如
'//div[@class="歌曲"]/p'
,表示定位到上述标签下的第三个p标签。 ps:索引从1开始。
——获取文字:
1. /text():获取标签的直接文本内容
2. //text():获取标签下所有文本内容
——获取属性值:
/@属性名
页:
[1]