在Python中查找字符串并在其旁边检索文本

问题描述 投票:0回答:1

我检索了以下源代码:

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

我尝试使用Python beautifulsoup提取信息,这对一些变量有用,但不适用于所有变量:

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

现在的问题是,是否有一种方法(可能使用正则表达式)来搜索单词(即“日期:”,“收件人:”,......)并检索旁边的文本(直到下一个“<” )而不是尝试使用源代码中的类(即跨度,类等)进行搜索?我尝试过str.split,str.match等,但似乎没什么用。

提前谢谢了!

python python-3.x web-scraping beautifulsoup
1个回答
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']}

然后,您可以根据需要操作和格式化字符串。

© www.soinside.com 2019 - 2024. All rights reserved.