爬虫学习 数据解析(三)

提取数据

 提供四种解析方式

  • re解析(正则表达式,难写)
  • bs4解析(效率低)
  • xpath解析(简洁好用)
  • pyquery解析(简单便捷)

重点讲re  xpath

结果OK,就OK,方式无所谓

正则表达式

        全新的 表达式语言

优点:速度快,效率高,准确性高,严谨       

缺点: 新手上手难度有点儿高.

在线正则表达式测试

普通字符  跟ctrl+F一样...

元字符  具有固定含义的特殊符号

.        除换行符的所有字符,(python re模块中是个坑?)

\w        匹配数字,字母,_

\d        匹配数字(一位)

\d\d\d\d\d....        多位

^        匹配开始        ^xxx

$        匹配末尾        xxx$

\n        换行符

\t        制表符

\W        非字母 数字 _

\D        非数字

|         或者        

()        分组

[..]        字符组        [abcdefg]        [a-gA-Z]

[^..]        除了字符组

量词

*        重复0次或更多        \d*

+       重复1次或更多        \d+

?        重复0次或1次        \d?

{n}        重复n次

{n,}       重复n次或者更多次

{n,m}        重复n次到m次

 贪婪和惰性

.*        贪婪匹配

        重复0次或更多次,再尽可能多        "呵呵呵哈哈哈"

a .* b        尽可能多(字符串要长)

.*?        惰性匹配

        尽可能少(字符串要短)

        回溯

.*?

re模块

import re

result = re.findall(r"\d+","我18岁,身价有200000000元")    #\转义 字符串前面加r
print(result)

result = re.finditer(r"\d+","我18岁,身价有200000000元")    
for item in result: #迭代器中拿东西
    print(item.group())   #.group从匹配的结果中拿数据

result = re.search(r"\d+","我18岁,身价有200000000元") #只匹配到第一次匹配的内容
print(result.group())

#match在匹配的时候,从字符串的开头进行匹配,类似于正则前加上了^
result = re.match(r"\d+","1111我18岁,身价有200000000元")   
print(result)

#预加载,提前把正则对象加载完毕
obj = re.compile(r"\d+")
# 直接把加载好的正则进行使用
result = obj.findall("我18岁,身价有200000000元")
print(result)

单独提取出来 一段内容 加(\d+)

爬虫学习 数据解析(三)_第1张图片

(?p\d+)      --   finditer   --   item.group        

爬虫学习 数据解析(三)_第2张图片

(?p<名字>正则) 

你可能感兴趣的:(python爬虫,爬虫,学习)