环境python3.9版本及以上,开发工具pycharm
数据解析提供了4种解析方式:re解析、xpath解析、bs4解析、pyquery解析
首先初步入门学习了爬虫方面的正则表达式。
正则表达式(regular expression)是一种使用表达式的方式对字符串进行匹配的语法规则。使用正则表达式的优点是速度快、效率高、准确性高;缺点是新手上手难度有点高。
语法:使用元字符进行排列组合用来匹配字符串(元字符:具有固定含义的特殊字符)
在线测试工具:https://tool.oschina.net/regex/
常用的元字符:
量词:控制元字符出现的次数
常用量词:
贪婪匹配和惰性匹配
其中惰性匹配使用了回溯算法。
然后是re模块。
re模块是Python中自带的库,直接使用import导入即可。
下面是re模块解析的相关内容:
import re result = re.findall("a", "我是abcdefg") print(result) print("*"*50) result = re.findall(r"\d+", "我今年18岁,我有10000块") print(result) print("*"*50) # 这个是重点,用的最多,多多练习 result = re.finditer(r"\d+", "我今年18岁,我有10000块") for item in result: # 从迭代器中拿到内容 print(item.group()) # 从匹配到的结果中拿到数据 print("*"*50) # search只会匹配到第一次匹配的内容 result = re.search(r'\d+', "我叫周杰伦,今年32岁,我的班级是3年2班") print(result.group()) print("*"*50) # match,在匹配的时候,是从字符串的开头进行匹配的,类似在正则前面加上了^ result = re.match(r'\d+', "我叫周杰伦,今年32岁,我的班级是3年2班") print(result) print("*"*50) # 预加载,提前把正则对象加载完毕 obj = re.compile(r'\d+') # 直接把加载好的正则进行使用 result = obj.findall('我叫周杰伦,今年32岁,我的班级是3年2班') print(result) print("*"*50) # 想要提取数据必须用小括号括起来,可以单独起名字 # (?P<名字>正则) # 提取数据时,需要group("名字") s = ''' <div class='西游记'><span id='10010'>中国联通</span></div> <div class='西游记'><span id='10086'>中国移动</span></div> ''' obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>") result = obj.finditer(s) for item in result: id = item.group("id") print(id) name = item.group("name") print(name)
运行结果如下:
['a'] ************************************************** ['18', '10000'] ************************************************** 18 10000 ************************************************** 32 ************************************************** None ************************************************** ['32', '3', '2'] ************************************************** 10010 中国联通 10086 中国移动
今天就暂时到这啦!下机!