Поиск строки и получение текста рядом с ней в Python - PullRequest
0 голосов
/ 30 августа 2018

У меня есть следующий исходный код:

class="show_small">Date: 2018-05-15 11:30:30<br/></span><span 
class="show_small ">Value: XXX<br/><span class="transfer-usd" 
title="now">YYY<span</span>Tx: <a class="local-link" href="/tx/IJK">IJK</a> 
<br/>From: <a class="local-link" href="/address/ABCD">ABCD</a><br/>To: <a 
class="local-link" href="/address/EFGH">EFGH</a></div>

И я хотел бы получить из него следующую информацию: Дата: 2018-05-15 11:30:30 Значение: XXX перевод USD: YYY От: ABCD Кому: EFGH

Я попытался извлечь информацию с помощью красивого супа Питона, который работает для некоторых переменных, но не для всех:

transactions = page_soup.findAll("span", {"title": "now"})
for transaction in transactions:
    value = transaction.find('span').previous_sibling
    print(value)

Теперь вопрос заключается в том, существует ли способ (вероятно, с помощью регулярных выражений) для поиска слов (например, «Дата:», «Кому:», ...) и извлечения текста рядом с ним (до следующего «<») вместо попытки поиска с использованием классов в исходном коде (т. е. span, class и т. д.)? Я пробовал с str.split, str.match и т. Д., Но, похоже, ничего не работает. </p>

Большое спасибо заранее!

1 Ответ

0 голосов
/ 31 августа 2018

Вот пример, показывающий, как вы можете использовать различные аргументы, доступные в BeautifulSoup, для навигации по каждой транзакции в зависимости от класса, содержимого или других свойств тега. Посмотрите документы BS для find_all / findAll , (в зависимости от версии), чтобы узнать больше.

import bs4 

code_sample = '<div name="record"><span class="show_small">Date: 2018-05-15 11:30:30<br/></span><span class="show_small ">Value: 123<br/></span><span class="transfer-usd" title="now">YYY</span>Tx: <a class="local-link" href="/tx/IJK">IJK</a><br/>From: <a class="local-link" href="/address/ABCD">ABCD</a><br/>To: <a class="local-link" href="/address/EFGH">EFGH</a></div>'
soup = bs4.BeautifulSoup(code_sample)
transactions = soup.find_all('div')

for transaction in transactions:
    output = {}
    output["date"] = transaction.find_all(string=re.compile('Date'))
    output["value"] = transaction.find_all(string=re.compile('Value'))
    output["transfer USD"] = transaction.find('span', class_="transfer-usd").contents
    print(output)

Выход:

{'date': ['Date: 2018-05-15 11:30:30'], 'value': ['Value: 123'], 'transfer USD': ['YYY']}

Затем вы можете манипулировать строками и форматировать их по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...