2013-05-07 3 views
2

Я пытаюсь разобрать сайт, чтобы вытащить некоторые данные, которые хранятся в организме, такие как это:Нужно найти текст с RegEx и BeautifulSoup

<body> 
    <b>INFORMATION</b> 
    Hookups: None 
    Group Sites: No 
    Station: No 

    <b>Details</b> 
    Ramp: Yes 
</body> 

Я хотел бы использовать BeautifulSoup4 и RegEx для вытащите значения для Hookups и Group Sites и т. д., но я новичок как в bs4, так и в RegEx. Я попробовал следующее, чтобы получить значение Hookups:

soup = BeautifulSoup(open('doc.html')) 
hookups = soup.find_all(re.compile("Hookups:(.*)Group")) 

Но поиск возвращается пустым.

ответ

15

BeautifulSoup's find_all работает только с тегами. Вы можете использовать просто чистое регулярное выражение, чтобы получить то, что вам нужно, если HTML-код прост. В противном случае вы можете использовать find_all, а затем получить узлы .text.

re.findall("Hookups: (.*)", open('doc.html').read()) 

Вы также можете осуществлять поиск по содержимому тега с text имущества по состоянию на BeautifulSoup 4,2

soup.find_all(text=re.compile("Hookups:(.*)Group")); 
+0

Этот ответ неверен, вы можете использовать 'soup.find_all (текст = re.compile (...)) ' – sberder

+0

@sberder этот ответ лет, поэтому BeautifulSoup, возможно, обновился с тех пор, но я проверил [их документы] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#a-regular- выражение), и даже с регулярным выражением это * неподвижно * применяется только к тегам, а не к их содержимому. Я думаю, что этот ответ по-прежнему верен и не заслуживает ниспроверки, но не стесняйтесь уточнять или вы можете дать другой ответ. –

+0

Неправильно, вы можете [использовать regexp для соответствия содержимому тега] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-text-argument): «" "Как с именем и аргументы ключевого слова, вы можете передать строку, регулярное выражение, список, функцию или значение True. "" " Возможно, это было правдой, когда вы написали свой ответ, но теперь это возможно. – sberder

Смежные вопросы