我已检索到以下源代码:
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等,但是似乎没有任何效果。
非常感谢!
答案 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']}
然后您可以根据自己的喜好对字符串进行处理和格式化。