LLLLoik 发表于 2021-12-11 15:23:08

求助!关于python爬虫中正则表达式re.compile()的问题

最近在做大作业时碰到了问题,大作业的内容是爬取全校老师的个人信息,遭遇的问题如下
大部分老师的主页html中是这样写的
<p>毕业院校:某某大学<p\>
但是有的老师是这么写的
<p><small>毕业院校:某某大学<small><p\>
我在re.compile()中应该如何表示<small>这个整体出现一次或零次?一般的正则表达式中可以用(<small>)?表示,但是compile中()代表要取的元素。。。我就不知道该用什么符号表示了,查了一圈也没查到相关信息,所以我现在是这么写的
大佬们帮帮忙吧,谢谢啦

suchocolate 发表于 2021-12-11 15:23:09

import re

s = '''
111
<p>毕业院校:A大学</p>
<p>毕业院校:B大学</p>
<p><small>毕业院校:C大学</small></p>
<p>毕业院校:D大学</p>
222
<p>毕业院校:E大学</p>
<p><small>毕业院校:F</small></p>
<p>毕业院校:G大学</p>
333
'''


result = re.findall(r'<p>(?:<small>)?(.*?)(?:</small>)?</p>', s)
print(result)
另外html结束标签是斜杠,且在元素前头。

阿奇_o 发表于 2021-12-11 15:52:08

这是"有的老师"写的?HTML标签都写错了,{:10_312:}
>>> s = '<p><small>毕业院校:某某大学</small></p>'
>>> print(re.search('<p><small>(.*?)</small></p>', s).group(1))
毕业院校:某某大学
>>>

LLLLoik 发表于 2021-12-11 16:32:52

suchocolate 发表于 2021-12-11 15:42
另外html结束标签是斜杠,且在元素前头。

啊抱歉抱歉,没学过html,我只记得个大概,标签写错了,我想再问问(?:<small>)?中的(?:是什么意思?学校没教过爬虫,都是自学,学艺不精{:10_266:}

LLLLoik 发表于 2021-12-11 16:34:45

标签是我记错了{:10_247:}

suchocolate 发表于 2021-12-11 17:09:44

本帖最后由 suchocolate 于 2021-12-11 17:17 编辑

LLLLoik 发表于 2021-12-11 16:32
啊抱歉抱歉,没学过html,我只记得个大概,标签写错了,我想再问问(?:)?中的(?:是什么意思?学校没教过爬 ...


import re

s = '''aaabbbccc
aaaeeeccc
aaahhhccc'''


result = re.findall(r'aaa(eee)ccc', s)# ()是组,这样匹配后默认只显示组内内容,不显示组外的内容
print('捕获组:', result)

result = re.findall(r'aaa(?:eee)ccc', s)# 非捕获组,组外也显示
print('非捕获组:', result)

小甲鱼的帖子,非捕获组:https://fishc.com.cn/thread-57317-1-3.html
页: [1]
查看完整版本: 求助!关于python爬虫中正则表达式re.compile()的问题