如何在Python中用regex从带空格的网页爬取字符串中提取子串?
实现方案
原有代码失败原因
你写的正则规则中使用了|作为匹配分隔符,但目标字符串中不存在该字符,同时匹配规则和目标内容的结构完全不匹配,因此无法得到正确结果。
最优实现代码
import re import pandas as pd # s = 你爬取得到的待处理长字符串 s = """\n display:block\u0022\u003E\n div class= span_6\u0022\u003E\n li class=\u0022borderbottom padleft pad20 nomargin\u0022\u003E\n span\u003E1. XXXXXXXX\/span\u003E\n strong class=\u0022floatright\u0022\u003EAAAAAAAA\/strong\u003E\n \/li\u003E\n li class=\u0022borderbottom padleft pad20 nomargin\u0022\u003E\n span\u003E2. YYYYYYYY\/span\u003E\n strong class=\u0022floatright\u0022\u003EBBBBBBBB\/strong\u003E\n""" # 提取键列表list1 pattern_key = r'span\u003E\d+\.\s(.*?)\/span' list1 = re.findall(pattern_key, s) # 提取值列表list2 pattern_value = r'strong class=\u0022floatright\u0022\u003E(.*?)\/strong' list2 = re.findall(pattern_value, s) # 生成你需要的字典格式 res_dict = dict(zip(list1, list2)) # 存入DataFrame,可根据实际需求调整列名 df = pd.DataFrame({ '字段名称': list1, '字段值': list2 }) # 测试输出 print(list1) print(list2) print(res_dict) print(df)
调整说明
如果你的待处理字符串已经完成了Unicode转义解码,可将正则里的\u003E替换为>,\u0022替换为"即可正常匹配。
内容的提问来源于stack exchange,提问作者nununu
相关产品推荐
相关产品推荐

