爬虫(三)——数据提取(2)

数据提取(2)

正则表达式

  • 定义:就是用事先定义好的一些特定字符、以及这些特定字符的组合,组成一个“规则字符串”,这个"规则字符串"用来表达对字符串的一种过滤逻辑
常用正则表达式的方法:
  • re.compile(编译)
  • pattern.match(从头找一个)
  • pattern.search(找一个)
  • pattern.findall(找所有)
  • pattern.sub(替换)
正则表达式中字符

正则字符

  • 注意:
re.findall(“要匹配的字符串”,“待匹配的字符串”) 的使用
  • “.“可以匹配任意字符除了”\n”,但是在DOTALL模式中可以匹配到
In [2]: import re

In [3]: re.findall(".","\n")
Out[3]: []

In [4]: re.findall(".","\n",re.DOTALL)
Out[4]: ['\n']

In [5]: re.findall(".","\n",re.S)
Out[5]: ['\n']
  • +表示一次或多次
In [14]: re.findall("a[bcd]e","abce")
Out[14]: []

In [15]: re.findall("a[bcd]+e","abce")
Out[15]: ['abce']

In [16]:
Do you really want to exit ([y]/n)? n

In [16]: re.findall("abce|aede|afce","abce")
Out[16]: ['abce']
  • +和*的区别
In [19]: re.findall("abc*","ab")
Out[19]: ['ab']

In [20]: re.findall("abc+","ab")
Out[20]: []
  • 贪婪
    • 尽可能多的往后匹配
    • (.*)
  • 非贪婪
    • 第一次遇到匹配成功的就结束,接着往后匹配
    • (.*?)
# 这个是非贪婪的
In [21]: re.findall("m(.*)m","jkmdfkmjkjkmjkksm")
Out[21]: ['dfkmjkjkmjkks']

# 这个是贪婪的
In [22]: re.findall("m(.*?)m","jkmdfkmjkjkmjkksm")
Out[22]: ['dfk', 'jkks']
re.sub(“要替换的字符串”,“替换成的字符串”,“待替换的字符串”) 的使用
In [23]: a = "WE6LOVE23CHINA"

In [24]: re.sub("\d","_",a)
Out[24]: 'WE_LOVE__CHINA'
re.compile()的使用
  • 使用compile方法预先把能够匹配到的结果放入内存中
  • 提高正则表达式匹配的效率
In [25]: re.compile("\d")
Out[25]: re.compile(r'\d', re.UNICODE)

In [26]: p = re.compile("\d")

In [27]: p.findall(a)
Out[27]: ['6', '2', '3']

In [28]: p.sub("_",a)
Out[28]: 'WE_LOVE__CHINA'
python中原始字符串r的用法
  • show me the codes
In [37]: a = "a\nb"

In [38]: print(a)
a
b

In [39]: len(a)
Out[39]: 3

In [40]: b = r"a\nb"

In [41]: print(b)
a\nb

In [42]: len(b)
Out[42]: 4

In [43]: b[1]
Out[43]: '\\'
  • 注意:r直接忽略转义字符带来的影响
In [44]: r"a\nb" == "a\nb"
Out[44]: False

In [46]: re.findall("a\nb","a\nb")
Out[46]: ['a\nb']

In [47]: re.findall(r"a\nb","a\nb")
Out[47]: ['a\nb']

In [48]: r"a\nb" == "a\\nb"
Out[48]: True

In [49]: re.findall(r"a\nb","a\\nb")
Out[49]: []
  • windows 下不使用原始字符串会出现问题
    • f = open(r"E:\LeetCode\test01.txt","r")
正则使用的注意点
  • re.findall("a(.*?)b",str),能够返回括号中的内容,括号前后的内容起到定位和过滤的效果
  • 原始字符串r,带匹配字符串中有"/"时,使用r能够忽视反斜杠带来的转义效果
  • .默认情况下匹配不到\n
  • \s能够匹配空白字符串,不仅包含空格,还有\t|\r|\n

(续)数据提取之XPath

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值