我是python和Beautiful soup的新手,但我正在研究一个可以从这个网站获取数据的网络抓取工具:
http://yiimp.eu/site/tx?address=DFc6oo4CAemHF4KerLG39318E1KciTs742
网页非常简单,基本上只是一张桌子,所以我只想抓住表格中的每个字段。我的问题是,对于第一个字段,我试图实际获取span title
中的日期而不是显示的实际值。我可以获取span titles
的列表,或者我可以从其他两个字段中获取其他信息,但我无法同时获取范围标题和其他两个字段。以下是我试图完成的一个例子:
2018-01-20 03:37:00
3.90135252
8ece3baba44382eec3d62fa76b5beba98ae398f81ad2d77556b95c3c1a739b4f
相反,我能做到的最好的是
{'title': '2018-01-20 03:57:00'}
2h ago
{'title': '2018-01-20 03:57:00'}
3.90135252
{'title': '2018-01-20 03:57:00'}
8ece3baba44382eec3d62fa76b5beba98ae398f81ad2d77556b95c3c1a739b4f
这很接近,但遗憾的是它复制了标题时间,将标题标记保留在输出中,它实际上只是为每条记录重复相同的日期和时间。实现我正在寻找的结果的最佳方法是什么?
这是我的代码
import requests
import time
from bs4 import BeautifulSoup
theurl = "http://yiimp.eu/site/tx?address=DFc6oo4CAemHF4KerLG39318E1KciTs742"
thepage = requests.get(theurl, headers={'User-Agent':'MyAgent'})
soup = BeautifulSoup(thepage.text, "html.parser")
for table in soup.findAll('td'):
print(table.text)
for time in soup.findAll('span'):
print(time.attrs)
count = 1
if count == 1:
count ==0
break
答案 0 :(得分:1)
尝试使用此方法获取所有行的值:
for row in soup.find_all('tr', {'class': 'ssrow', 'style': None}):
time = row.find('span')['title']
amount = row.find('td', {'align': 'right'}).find('b').text
tx = row.find('a').text
# Print these values however you want.
检查第一行的代码:
row = soup.find('tr', {'class': 'ssrow', 'style': None})
time = row.find('span')['title']
amount = row.find('td', {'align': 'right'}).find('b').text
tx = row.find('a').text
print(time, amount, tx)
输出:
2018-01-20 06:56:43 4.42507599 d142445fd36e6a141a18071110faa8f6f3f9f8a42de888a149d8aa9416fe83ce
说明:
所有行都包含在<tr>
标记中,但第一个<tr>
标记用于标题。为了对其进行过滤,我添加了属性'class': 'ssrow'
,因为所有其他行都具有该属性。但是,如果您可以看到最后一行,则其<tr>
标记包含style="border-top: 2px solid #eee;"
。为了过滤掉,我添加了'style': None
。