在Python中查找字符串并获取其旁边的文本

时间:2018-08-30 12:57:15

标签: python python-3.x web-scraping beautifulsoup

我已检索到以下源代码:

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 美元汇款:YYY 来自:ABCD 收件人:EFGH

我尝试使用Pythons漂亮的汤来提取信息,它确实适用于某些变量,但不适用于所有变量:

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

现在的问题是,是否有一种方法(可能使用正则表达式)来搜索单词(例如“ Date:”,“ To:”,...)并检索其旁边的文本(直到下一个)而不是尝试使用源代码中的类(即span,class等)进行搜索?我已经尝试过str.split,str.match等,但是似乎没有任何效果。

非常感谢!

1 个答案:

答案 0 :(得分:0)

这里有一个示例,展示如何使用BeautifulSoup中可用的不同参数来根据类,内容或其他标记属性导航每个事务。看看the BS docs for 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']}

然后您可以根据自己的喜好对字符串进行处理和格式化。