python爬虫值数据解析

1.数据解析

1.1数据解析的分类

  1. 正则
  2. bs4
  3. xpth

1.2数据解析的原理

解析的局部文本内容都会在标签之间或者标签对应的属性中进行存储
1.进行指定标签的定位
2.标签或者标签对应的属性中存储的数据值进行提取(解析)

1.3聚焦爬虫

爬取页面中指定的页面内容
编码流程
1.指定url
2.发起请求
3.获取响应数据
4.数据解析
5.持久化存储

2正则表达式爬虫

2.1常用正则表达式回顾

单字符:
	.:除换行以外所有字符
	[]:[aoe][a-w]匹配集合中任意一个字符
	\d:数字[0-9]
	\D:非数字
	\w:数字、字母、下划线、中文
	\W:非\w
	\s:所有非空字符包,包括制表符、换页符等等。等价于{\f\t\w\n\r}
	\S:非空白
数量修饰:
	*:任意多次 >=0
	+:至少一次 >=1
	?:可有可无 1次或者0{m}:固定m次
	{m,}:至少m次
	{m,n}:m-n次
边界:
	$:以某某字符开头
	^:以某某字符结尾
分组:
	(ab)
贪婪模式: .*
非贪婪(惰性)模式: .*?

re.I 忽略大小写
re.M 多行匹配
re.S 单行匹配

re.sub(正则表达式,替换内容,字符串)

3.bs4进行数据解析

3.1数据解析原理

  1. 标签定位
  2. 提取标签、标签属性中存储的数据值

3.2bs4数据解析的原理

1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
2.通过调用BeautifulSoup对象中相关的属性或方法进行标签定位和数据提取

3.3环境安装

pip install bs4
pip install lxml

3.4如何实例化BeautifulSoup对象

from bs4 import BeautifulSoup
对象的实例化
    1.将本地的HTML文档中的数据加载到该对象中

from bs4 import BeautifulSoup
fp=open('./sogou.html','r',encoding='utf-8')
soup=BeautifulSoup(fp,'lxml')
print(soup)

    2.将互联网上获取的页码源码加载到该对象中
提供的用于数据解析的方法和属性

  • soup.tagName:返回的是文档中第一次出现名为tagName对应的标签
  • sopu.find():
         find(‘div’)等同于soup.div
         属性定位:soup.find(‘div’,class_/id/attr=‘x’)类名为x的div
         soup.find_all(‘tangname’):返回符合要求的所有标签

select:
     select(‘某种选择器(id、class、标签选择器)’)返回的是一个列表
   层级选择器
      soup.select(’.ta > ul > li’):>表示一个层级
      soup.select(’.ta ul li’):>表示多个层级

获取标签之间的文本内容(数据):soup.a.text/string/get_text()
text/get_text():可以获取某一个标签中所有的文本内容
string:只可以获取该标签下面直系的文本内容
获取标签中的属性值:
soup.find(“标签”)[‘属性值’]

4xpath数据解析

最常用且最便捷高效的一种解析方式。通用性

4.1xpath解析原理

  1. 实例化一个etree对象,且需要将被解析的页面的源码数据加载到该对象中
  2. 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获

4.2环境安装

pip install lxml

4.3如何实例化一个etree对象

from lxml import etree

  1. 将本地的HTML文档中的源码数据加载到etree对象中
    etree.parse(filepath)
  2. 可以将互联网上的源码数据加载到该对象中
    etree.HTML(‘page_text’)
    xpath(‘xpath表达式’)

4.4xpath表达式

  • /:表示从根节点开始定位。表示的是一个层级
  • //:表示的是多个层级。可以表示从任意位置开始定位
  • 属性定位: //div[@class=‘div1’] 名为div1的id选择器 tag[@attrName="attrvalue]
  • 索引定位: //div[@class=“div2”]/p[3] 索引是从1开始的
  • 取文本:
            /text() 获取的是标签中直系的文本内容
            //text() 标签中非直系的文本内容(所有的文本内容)
  • 取属性 /@attrname 例:img/@src

样例展示

import requests
from lxml import etree

url='https://bj.58.com/ershoufang/?PGTID=0d100000-0000-153f-2e71-d52d39e367c2&ClickID=2'
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63"
}
res=requests.get(url=url,headers=headers).text
tree=etree.HTML(res)
list=tree.xpath("//section[@class='list']")
for li in list :
    t=li.xpath(".//h3/text()")
    tt= li.xpath(".//h3/@tittle")
    print(t,tt)

5.验证码的识别

5.1验证码与爬虫直接的联系

反爬机制:识别验证码图片中的数据,用于模拟登录操作

5.2识别验证码的操作

  1. 人工肉眼识别(不推荐)
  2. 第三方自动识别(推荐)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值