【问题标题】:Python 27 - BeautifulSoup and TablesPython 27 - BeautifulSoup 和表格
【发布时间】:2017-02-19 04:00:08
【问题描述】:

我有这个来源:

<tr id="bitstampUSD">
<td class="arrow" change="up" latest_trade="1363480722">
  <span class="down">▼</span>
</td>

<td class="symbol">
    <nobr>
    <a href="/markets/bitstampUSD.html">bitstampUSD</a>
    </nobr>
    <span class="sub">USD (SEPA converted)</span>
</td>
<td>46.74
    <span class="sub">41 min ago</span>
</td>
<td class="minichart break">
  <span volume="**whole heaps of number here that I want**"
  print="**more numbers I want**"
  avg="**more numbers I want**"
  class="marketsparkline"></span>
</td>
<td>**36.39**

  <span class="sub change">**10.35 28.46%**</span>

</td>
<td>**141,043.10**
    <span class="sub">**5,132,052.22 USD**</span>
</td>
<td>**25.25**
    <span class="sub">**46.58** (24h)</span>
</td>
<td>**49.17**
    <span class="sub">47 (24h)</span>
</td>
<td class="break">**46.7**</td>
<td>**46.74**</td>
<td class="break">**46.78**

  <span class="sub change">-0.04 -0.09%</span>

</td>
<td>**819.54**
    <span class="sub">**38,340.96** USD</span>
</td>
      </tr>

所以我想以粗体显示数据。 (嗯,它应该是粗体的,我猜代码标签阻止了这种情况的发生。两个星号内的数据。

我设法弄清楚如何获取我没有包含在代码中的位,因为它在类中。但是这里,有些是课外的,所以我不知道如何抓住它。

如果你想要http://bitcoincharts.com/markets/,查看整个源代码可能会有所帮助 它的布局与我以前见过的其他表格代码不同。

【问题讨论】:

  • 与其摆弄HTML解析,用他们的Markets API不是更容易吗?我自己尝试了一下,它返回了一个不错的 JSON 编码的字典列表,其值类似于 [{u'volume': 822.42673038, u'latest_trade': 1363486862, u'bid': 46.81, u'high': 47.0, u'currency': u'USD', u'currency_volume': 38473.8713986671, u'ask': 46.83, u'close': 46.81, u'avg': 46.78091066044309, u'symbol': u'bitstampUSD', u'low': 46.58}]
  • 天哪!哈哈好吧,无论如何我都想解决这个问题,但如果它失败了,我会看看那个,干杯。
  • Haidro - 由于某种原因返回一个空白列表。
  • @DSM 你能解释一下如何使用这些数据吗?我现在正在尝试使用 API 的方式,但我不确定如何使用它。一大堆数据,如何区分哪些数据属于哪个交易所?

标签: python-2.7 web-scraping beautifulsoup html-table


【解决方案1】:

嗯,这比你要求的多一点,但应该让你开始:

soup = BeautifulSoup(f)
for td in soup.find_all('td', class_='minichart break'):
    avg = td.span['avg']
    print_ = td.span['print']
    volume = td.span['volume']
    print avg, print_, volume

for td in soup.find_all('td'):
    print 'TD', td.text.split()

在你的例子中我得到:

**more numbers I want** **more numbers I want** **whole heaps of number here that I want**                                                                                                                                                                                         
[u'\u25bc']                                                                                                                                                                                                                                                                        
[u'bitstampUSD', u'USD', u'(SEPA', u'converted)']                                                                                                                                                                                                                                  
[u'46.74', u'41', u'min', u'ago']                                                                                                                                                                                                                                                  
[]                                                                                                                                                                                                                                                                                 
[u'**36.39**', u'**10.35', u'28.46%**']                                                                                                                                                                                                                                            
[u'**141,043.10**', u'**5,132,052.22', u'USD**']                                                                                                                                                                                                                                   
[u'**25.25**', u'**46.58**', u'(24h)']                                                                                                                                                                                                                                             
[u'**49.17**', u'47', u'(24h)']                                                                                                                                                                                                                                                    
[u'**46.7**']                                                                                                                                                                                                                                                                      
[u'**46.74**']                                                                                                                                                                                                                                                                     
[u'**46.78**', u'-0.04', u'-0.09%']                                                                                                                                                                                                                                                
[u'**819.54**', u'**38,340.96**', u'USD']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多