2016-03-21 4 views
0

У меня есть список, который я извлекаю из прекрасного супа, используя атрибуты.Извлечение текста из тега div

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>] 

Я получаю сообщение об ошибке, когда я пытаюсь найти шаблон в g_info с помощью регулярных выражений y=re.compile(r'B00(.{7})',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
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 

UPDATE: Использование кода:

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 в строку и регулярное выражение должно работать.

+0

Получение этой ошибки при попытке ее выполнить. 'print re.search ('B00. {7}', g_info) .group (0) Файл« C: \ Python27 \ lib \ re.py », строка 142, в поиске return _compile (pattern, flags) .search (string) TypeError: ожидаемая строка или буфер' –

+0

Спасибо, мне пришлось набирать g_info на str, а затем она работала. Спасибо –

+0

@bojra: можете ли вы рассказать мне, что вы делаете, используя функцию соединения? –