我有一个列表,我可以使用属性从美丽的汤中提取。
g_info = soup.find_all("div", {"id":"details_readonly"})
print g_info ## this prints out all the contents of the div tag.
y = re.compile(r'B00(.{7})',g_info)
print y
该列表是未经过清理的HTML。此列表中的某个位置是一个文本,其中的模式始终以B00开头,它是一个10位数字,需要从包含随机文本的div标签中的多个页面中提取。
g_info有一个列表,其中包含列表的所有html内容。这个列表与此类似:
[<div id="details_readonly" style="">\n<h2>Lorem Ipsum <small></h2>\n Lorem Ipsum text <br/>Lorem Ipsum text
Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem
Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text
No<br/> B00EQ0CKRQ <br/>Lorem Ipsum text Lorem Ipsum text
Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem
Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum
text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text
</div>]
当我尝试使用正则表达式y=re.compile(r'B00(.{7})',g_info)
在g_info中查找模式时出现错误:
y = re.compile(r'B00(.{7})',g_info)
File "C:\Python27\lib\re.py", line 190, in compile
return _compile(pattern, flags)
File "C:\Python27\lib\re.py", line 232, in _compile
p = _cache.get(cachekey)
TypeError: unhashable type: 'ResultSet'
有人可以帮助我使用上面提到的模式从div标签中提取内容。
答案 0 :(得分:0)
import re
g_info = '<div id="details_readonly" style="">\n<h2>Lorem Ipsum <small></h2>\n Lorem Ipsum text <br/>Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text No<br/> B00EQ0CKRQ <br/>Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text Lorem Ipsum text </div>]'
print re.search('B00.{7}', g_info).group(0)
输出:
B00EQ0CKRQ
更新:使用您的代码:
g_info = soup.find_all("div", {"id":"details_readonly"})
print g_info ## this prints out all the contents of the div tag.
y = re.search('B00.{7}', ''.join(g_info)).group(0)
print y
''.join(g_info)
会将列表g_info
转换为字符串,正则表达式应该可以正常工作。