鱼C论坛

 找回密码
 立即注册
查看: 954|回复: 5

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

[复制链接]
发表于 2021-12-11 15:23:08 | 显示全部楼层 |阅读模式
10鱼币
最近在做大作业时碰到了问题,大作业的内容是爬取全校老师的个人信息,遭遇的问题如下
大部分老师的主页html中是这样写的
<p>毕业院校:某某大学<p\>
但是有的老师是这么写的
<p><small>毕业院校:某某大学<small><p\>
我在re.compile()中应该如何表示<small>这个整体出现一次或零次?一般的正则表达式中可以用(<small>)?表示,但是compile中()代表要取的元素。。。我就不知道该用什么符号表示了,查了一圈也没查到相关信息,所以我现在是这么写的 []~QD3M1I~(P~0(O5PRG.png 0D%4KOBD@UM]W4_24%1UP]G.png
大佬们帮帮忙吧,谢谢啦
最佳答案
2021-12-11 15:23:09
  1. import re

  2. s = '''
  3. 111
  4. <p>毕业院校:A大学</p>
  5. <p>毕业院校:B大学</p>
  6. <p><small>毕业院校:C大学</small></p>
  7. <p>毕业院校:D大学</p>
  8. 222
  9. <p>毕业院校:E大学</p>
  10. <p><small>毕业院校:F</small></p>
  11. <p>毕业院校:G大学</p>
  12. 333
  13. '''


  14. result = re.findall(r'<p>(?:<small>)?(.*?)(?:</small>)?</p>', s)
  15. print(result)
复制代码

另外html结束标签是斜杠,且在元素前头。

最佳答案

查看完整内容

另外html结束标签是斜杠,且在元素前头。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 15:23:09 | 显示全部楼层    本楼为最佳答案   
  1. import re

  2. s = '''
  3. 111
  4. <p>毕业院校:A大学</p>
  5. <p>毕业院校:B大学</p>
  6. <p><small>毕业院校:C大学</small></p>
  7. <p>毕业院校:D大学</p>
  8. 222
  9. <p>毕业院校:E大学</p>
  10. <p><small>毕业院校:F</small></p>
  11. <p>毕业院校:G大学</p>
  12. 333
  13. '''


  14. result = re.findall(r'<p>(?:<small>)?(.*?)(?:</small>)?</p>', s)
  15. print(result)
复制代码

另外html结束标签是斜杠,且在元素前头。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 15:52:08 | 显示全部楼层
这是"有的老师"写的?HTML标签都写错了,
  1. >>> s = '<p><small>毕业院校:某某大学</small></p>'
  2. >>> print(re.search('<p><small>(.*?)</small></p>', s).group(1))
  3. 毕业院校:某某大学
  4. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-11 16:32:52 | 显示全部楼层
suchocolate 发表于 2021-12-11 15:42
另外html结束标签是斜杠,且在元素前头。

啊抱歉抱歉,没学过html,我只记得个大概,标签写错了,我想再问问(?:<small>)?中的(?:是什么意思?学校没教过爬虫,都是自学,学艺不精
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-11 16:34:45 | 显示全部楼层
标签是我记错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 17:09:44 | 显示全部楼层
本帖最后由 suchocolate 于 2021-12-11 17:17 编辑
LLLLoik 发表于 2021-12-11 16:32
啊抱歉抱歉,没学过html,我只记得个大概,标签写错了,我想再问问(?:)?中的(?:是什么意思?学校没教过爬 ...


  1. import re

  2. s = '''aaabbbccc
  3. aaaeeeccc
  4. aaahhhccc'''


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

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


小甲鱼的帖子,非捕获组:https://fishc.com.cn/thread-57317-1-3.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 19:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表