Python 3中的BeautifulSoup 4:如何在消失的表中获取表行?

时间:2015-11-06 20:25:02

标签: python beautifulsoup

我花了5个小时尝试使用BeautifulSoup 4和Python 3解析一个包含汇率的表格,遵循指南和bs4手册,但表格的一部分神奇地消失了。

这是页面: The page with exhange rates I want to parse.

当我在浏览器中检查元素时,我看到一个简单的表:

<table width="100%" align="center" class="tbl_text"><tbody id="shapka"><tr align="center"><td>Время начала действия курса </td><td colspan="2" align="center">Доллары США, USD</td><td colspan="2" align="center">Евро, EUR</td><td colspan="2" align="center">Рубли, RUB*</td></tr></tbody><tbody id="shapka_sub"><tr align="center"><td>&nbsp;</td><td><b>Покупка</b></td><td><b>Продажа</b></td><td><b>Покупка</b></td><td><b>Продажа</b></td><td><b>Покупка</b></td><td><b>Продажа</b></td></tr></tbody><tbody style="font-weight: bold;"><tr><td>06.11 c 17:36</td><td>308.56</td><td>313.81</td><td>333.87</td><td>342.81</td><td>4.752</td><td>5.107</td></tr></tbody><tbody><tr><td>06.11 c 17:16</td><td>308.56</td><td>313.81</td><td>334.24</td><td>343.15</td><td>4.752</td><td>5.107</td></tr></tbody><tbody><tr><td>06.11 c 16:46</td><td>308.56</td><td>313.81</td><td>333.93</td><td>342.78</td><td>4.752</td><td>5.107</td></tr></tbody><tbody><tr><td>06.11 c 16:26</td><td>308.56</td><td>313.81</td><td>333.93</td><td>342.78</td><td>4.743</td><td>5.096</td></tr></tbody><tbody><tr><td>06.11 c 15:56</td><td>307.06</td><td>312.3</td><td>332.25</td><td>341.13</td><td>4.728</td><td>5.083</td></tr></tbody></table>

我的代码:

import urllib.request
from bs4 import BeautifulSoup

# url = input('URL: ')
url = 'http://ru.kkb.kz/cards/page/Rates'
html = urllib.request.urlopen(url).read()
s = BeautifulSoup(html, 'html.parser')
# Attempt 1: it only gets part of table
table = s.find ('table')
print ("Attempt 1:")
print (table)

#Attempt 2: and it fails to get ALL the td tags...
tds = s('td')
print ("Attempt 2:")
print (tds)

#Attempt 3: worked once in shell but not run-time
tbody = s.find('tbody', style="font-weight: bold;")
print ("Attempt 3:")
print (tbody)

print ("Why I can't get the values in td?")

我总是以表头的一部分结束,但不是值。 如何用表格得到表格的第二部分?

1 个答案:

答案 0 :(得分:2)

您需要发送包含以下数据的POST请求,然后将响应解析为:

day=5&month=11&year=2015&view=%D0%9F%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C

即:

  

第5天

     

第11个月

     

2015年

     

查看Показать

为了解决这个问题,我在Chrome开发者工具中查看了网络标签。即使页面使用javascript将数据加载到页面中(我不认为 - 这只是一个表单),您通常可以找出脚本从中获取数据的URL。