正则的语法
.
匹配到除了 \n 之外的所有字符, re.S 模式下可以匹配 \n, re.DOTALL 可以让正则表达式中的点(.)匹配包括换行符在内的任意字符\
转义[]
或,选择其中的一个内容|
或,选择|
两边的内容*
匹配 0 次或者多次+
匹配一次或者多次?
非贪婪\s
空白字符\d
匹配数字
re模块的常见方法
-
pattern.match(从头找一个)
-
pattern.search(找一个)
-
pattern.findall(找所有)
- 返回一个列表,没有就是空列表
re.findall("\d","chuan1zhi2") >> ["1","2"]
-
pattern.sub(替换)
re.sub("\d","_","chuan1zhi2") >> ["chuan_zhi_"]
-
re.compile(编译, 提高匹配效率)
-
返回一个模型P,具有和re一样的方法,但是传递的参数不同
-
匹配模式需要传到compile中
p = re.compile("\d",re.S) p.findall("chuan1zhi2")
-
-
re模块的常用方法
- re.findall(“regex”,“str”) #返回列表
re.sub("regex","_","str")
#返回字符串re.compile("regex",re.S)
# 编译,提高匹配效率
-
原始字符串r
- 相对于特殊符号而言,表示特殊符号的字面意思
- 用途
- 正则:忽略转义符号带来的印象,加上r之后照着写
\
- windows下文件路径
- 正则:忽略转义符号带来的印象,加上r之后照着写
xpath
选取节点
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
使用chrome插件选择标签时候,选中时,选中的标签会添加属性class="xh-highlight"
下面列出了最有用的表达式:
表达式 | 描述 |
---|---|
nodename | 选中该元素。 |
/ | 从根节点选取、或者是元素和元素间的过渡。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
… | 选取当前节点的父节点。 |
@ | 选取属性。 |
text() | 选取文本。 |
xpath语法
//
的用途//a
当前html页面上的所有的abookstore//book
bookstore下的所有的book元素
@
的使用//a/@href
所有的a的href//title[@lang="eng"]
选择lang=eng的title标签
text()
的使用//a/text()
获取所有的a下的文本//a[text()='下一页']
获取文本为下一页的a标签a//text()
a下的所有的文本
- xpath查找特定的节点
//a[1]
选择第一个//a[last()]
最后一个//a[position()<4]
前三个
lxml模块的使用
from lxml import etree
# 把 html 字符串转化为 element 对象,具有 xpath 方法
element = etree.HTML(html_str) #bytes或者str类型的字符串
element.xpath("xpath str") #返回列表
# 把 element 对象转化为字符串, 会自动对页面进行调整
etree.tostring(element) #转化为字符串
#数据提取时:先分组,在提取