自学Python爬虫笔记(day3)

发布时间 2023-04-06 14:38:40作者: Peom`

环境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
中国移动

今天就暂时到这啦!下机!