持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
正则表达式是用来匹配与查找字符串的,从网上爬取数据自然或多或少会用到正则表达式,python的正则表达式要先引入re模块. python中re模块提供了正则表达式的功能,常用的有四个方法(match、search、findall)都可以用于匹配字符串
当我们需要调用的时候可以 通过pandas包进行直接调用
- 1.需要导入的包是csv包,表示可以将相关信息存入csv表中
- 2.需要导入的包是re包,用于正则表达式的书写
- 3.需要导入额包是requests包,用于获取网页源代码
获取网页源码的代码是:
url = "https://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36"
}
resp = requests.get(url=url,headers=headers)
print(resp.text)
注意: 这里加入User-Agent的作用是为了避免反扒,这是一种最基本的操作,之后还会有一些复杂的操作
需要注意的是:正则表达式的书写方式有很多,一定要注意最后文件的关闭,防止被IP禁止或者占用内存资源.
我们可以将我们爬取的内容存放入excel或者csv表中,方便之后进行数据分析.
f = open("data.csv", mode="w", encoding="utf-8", newline='')
csvlist = csv.writer(f)
1. findall(返回的是列表)
findall: 匹配字符串中所有的符合正则的内容
lst = re.findall(r"\d+", "我的电话号是:10086 我女朋友的电话是:10010")
print(lst)
2. finditer(返回的是迭代器)
finditer: 匹配字符串中所有的内容[返回的是迭代器], 从迭代器中拿到内容需要.group()
it = re.finditer(r"\d+", "我的电话号是:10086, 我女朋友的电话是:10010")
for i in it:
print(i.group())
3. search
search, 找到一个结果就返回, 返回的结果是match对象. 拿数据需要.group()
s = re.search(r"\d+", "我的电话号是:10086, 我女朋友的电话是:10010")
print(s.group())
4. 预加载正则表达式
obj = re.compile(r"\d+")
ret = obj.finditer("我的电话号是:10086, 我女朋友的电话是:10010")
for it in ret:
print(it.group())
ret = obj.findall("呵呵哒, 我就不信你不换我1000000000")
print(ret)
5. match
re.match()必须从字符串开头匹配! match方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。