1.7认识网页解析工具

课前说明:

       网页解析工具有很多种,例如:re、xpath、jsonpath、bs4等等,本章节简单介绍一下re和xpath的用法,其它解析工具自行学习O(∩_∩)O哈!

 本章节需要掌握的知识点:

re正则的使用

xpath的使用

re 详解:

import re

#
string = '''Hi girl!
    Are you free tonight?
    Let's go to play!
'''

# 1) 元字符
# 普通字符  字母 数字 下划线等 ascci 码表中可见的字符
# pat = r'o'
# ret = re.findall(pattern=pat, string=string)

# 非打印字符
# pat = r'\n'
# ret = re.findall(pattern=pat, string=string)

# 2) 通配符
# 用某些特殊字符串,来表示某一类字符
'''
\w  任意的字母、数字、下划线
\W  任意的非字母、数字、下划线
\d  数字
\D
\s  空白
\S

[abc]  匹配a、b或c
[a-e]  匹配 a-e 之间的任意一个字符
[^abc] 匹配除了abc之外的任意字符
'''
pat = r'[^abc]'
ret = re.findall(pattern=pat, string=string)

# 3)特殊字符
'''
.   任意字符

$   以某某结束
+   重复一次到多次
*   重复0多多次
?   至多重复1次
{m} 重复m次
'''
# pat = r'^H.+'
# ret = re.findall(pattern=pat, string=string)

# 4) 模式修正print(ret)
# 如果要进行模式修正,首先要用compile 将正则字符编译成正则对象
# pat = re.compile(r'^H.+!$', re.S)
# ret = pat.findall(string)
'''
re.I    忽略大小写
re.S    把多行字符串视为一行
re.M    把多行字符串拆成多个单行来匹配
'''

# # 贪婪于懒惰
# string = 'dfasdfa l apfdsafadsfpafpaasfdapaasfda'
# # pat = re.compile(r'.*pa')  # 贪婪模式:按照规则一直寻找到最后一个符合规则字符为止
# pat = re.compile(r'.*?pa')  # 懒惰模式:按照规则寻找到第一个符合就停止
# ret = pat.findall(string)
print(ret)

第一张图片是 re 比较常用的一些知识点:

xpath详解: 

from lxml import etree

# lxml 这个框架用于对xml 文件进行格式化操作(说明:HTML是一种特殊的xml文件)
# xpath 是一种在XML中,根据文档的结构来提取目标元素和属性的语法,它的基础库就是lxml

# etree 的作用就是把HTML 字符串用一个树型结构来表现出来,也成为节点树
# 1、用 etree 把HTML 加载进来,并且创建出一颗节点树
# 加载本地文件
html_tree = etree.parse('./test.html')

# 2、获取节点  获取test文件中第一个li
# ret = html_tree.xpath('/html/body/ol/li[1]/text()')
# print(ret)
# xpath方法可以根据xpath 语法把符合语法的所有的节点对象放在列表中返回
# ret = html_tree.xpath('/html/body/div/div[1]/a')

# 3、获取属性和内容
# ret = html_tree.xpath('/html/body/ol/li[2]/text()')  # 获取节点中的文本内容
# ret = html_tree.xpath('/html/body/div/div[2]/a/@href')  # 获取节点的某个属性

# 4、定位
# 1)层级定位
# 查找页面上所有的li
# ret = html_tree.xpath('//li/text()')  # 在xpath语法中,/ 代表两层节点中间只相隔一层, // 代表相隔若干层
# ret = html_tree.xpath('//ol//@class')
# 2)属性定位
# 查找页面上所有带id属性的li
# ret = html_tree.xpath('//li[@id]/text()')
# 查找页面上所有的class值为dudu的li
# ret = html_tree.xpath('//li[@class="dudu"]/text()')
# 注意:xpath 中一定要把要查找的属性值写全
# ret = html_tree.xpath('//li[@class="hehe jj]/text()"')
# 5、模糊匹配
# 查找所有的class值中包含 he 的li
# ret = html_tree.xpath('//li[contains(@class, "he")]/text()')
# 查找所有的class值以 h 开头的li
# ret = html_tree.xpath('//li[starts-with(@class, "h")]/text()')

# 6、逻辑匹配
# 与:查找所有的包含有id属性并且含有class 的那些li
# ret = html_tree.xpath('//li[@id="hh" and @class]')
# 或:查找id 属性为hh,class 属性为name的 li
# ret = html_tree.xpath('//li[@id="hh" or @class="name"]')
# print(ret)

第二张图是 xpath 常用的知识点,结合这些知识点基本能解析所有的页面 

温馨提示:多动手动脑才能记得住哦n(*≧▽≦*)n! 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值