从div标签中提取文本

时间:2016-03-21 09:42:16

标签: python html regex selenium beautifulsoup

我有一个列表,我可以使用属性从美丽的汤中提取。

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标签中提取内容。

1 个答案:

答案 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转换为字符串,正则表达式应该可以正常工作。