如何在Python中提取两个标签之间的数字?

时间:2017-04-26 02:28:26

标签: python beautifulsoup

import requests
from bs4 import BeautifulSoup

url = 'http://www.x-rates.com/table/?from=USD&amount=1'

page = requests.get(url)

soup = BeautifulSoup(page.content, "lxml")

print soup.prettify()
        <td>
         Chinese Yuan Renminbi
        </td>
        <td class="rtRates">
         <a href="/graph/?from=USD&amp;to=CNY">
          6.887711
         </a>
        </td>
        <td class="rtRates">
         <a href="/graph/?from=CNY&amp;to=USD">
          0.145186
         </a>
        </td>
       </tr>

请问我如何在标签&#39;之间提取内容? 假设我想在结果的第6行得到6.887711?

3 个答案:

答案 0 :(得分:0)

您可以使用soup.find_all()遍历所有这些内容:

for tag in soup.find_all("a"):
    print(tag.text.strip())

哪个会输出:

6.887711
0.145186
...

答案 1 :(得分:0)

如果您只想获取第一个标记,则可以使用href差异并使用 regex 来匹配相应的标记;例如,第一个标记的hrefCNY结尾,使用带有正则表达式re的{​​{1}}模块来匹配CNY$属性:

href

答案 2 :(得分:0)

在这种情况下,您可以考虑使用lxml库,因为它使xpath可用。

>>> from lxml import etree
>>> import requests
>>> url = 'http://www.x-rates.com/table/?from=USD&amount=1'
>>> HTML = requests.get(url).text
>>> parser = etree.HTMLParser()
>>> tree = etree.fromstring(HTML, parser=parser)
>>> currency = tree.xpath('.//table[2]/tbody/tr[3]/td[1]')
>>> currency[0].text
'Bahraini Dinar'
>>> USDrate = tree.xpath('.//table[2]/tbody/tr[3]/td[3]/a')
>>> USDrate[0].text
'2.652179'

在这种情况下,我找到了第二个表,然后是该表的第三行,然后是该行的第一个和第三个单元格。