实在写不出来,你看我都发贴求问了。。。。喵~
<em class="xyz ">utxu2zy</em>
求两种写法, 目的只有一个:匹配 em 标签区段的内容,
内容有可能什么字符(包括全半角或者制表符、回车什么的)都可能会有
1、确定是 class 属性绝对是"xyz ",z 后面有空格的正则匹配写法?
2、class 属性无法确定,属性的内容也是什么英文数字都有可能,的正则匹配写法?
1
yanaraika 2018-08-26 21:57:08 +08:00
1. html 文法理论上无法用非魔改正则匹配
2. 用条件引用之类的魔改正则可以做到,随便搜一下就有 http://www.imkevinyang.com/2009/07/%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8C%B9%E9%85%8D%E5%B5%8C%E5%A5%97html%E6%A0%87%E7%AD%BE.html 3. 但 2 的写法又臭又长,为什么不丢进 beautifulsoup 里用 CSS selector |
2
lazyboy 2018-08-26 22:17:19 +08:00
<(em)[^>]*?class="xyz\s"[^>]*?>[^<]*?<\/\1>
|
3
leafiy 2018-08-26 22:18:03 +08:00 via Android
.$? 加上 em ?
|
4
lazyboy 2018-08-26 22:18:14 +08:00
<(em)[^>]*?>[^<]*?<\/\1>
|
5
des 2018-08-26 22:30:40 +08:00 via Android
同一楼,不要用正则
爬虫用正则很容易出问题,并且正则也难写,一旦碰到问题就傻眼了,根本没法改和维护。除非就只用一次,根本不用维护 同一楼,老老实实用 Beautiful Soup 不行吗? |
6
jjplay 2018-08-26 22:38:21 +08:00
不要死盯着这个 class,可以从他的父级 class 来定位
|
7
simoncc 2018-08-27 01:13:25 +08:00
用 lxml 吧,解析速度快,使用也方便,控制台选中元素右键 copy xpath 即可
|
8
delectate 2018-08-27 06:59:30 +08:00
>>> import re
>>> a='<em class="xyz ">utxu2zy</em>' >>> re.findall(r'<em class="xyz.?">(.*)<\/em>',a, re.I) >>> a='<em class="xxxxx">utxu2zy</em>' >>>>>> re.findall(r'<em class=".*">(.*)<\/em>',a, re.I) |