2017-04-26 283 views
0
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> 

请问,我怎样才能提取标签“A”之间的内容? 假设我想在结果的第6行得到6.887711?如何提取Python中两个标签之间的数字?

回答

0

您可以使用soup.find_all()通过所有这些迭代:

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

这将输出:

6.887711 
0.145186 
... 
+0

谢谢!但是如果我只想提取6.887711,我应该怎么做? –

+0

你在哪里看到6.887711是第6排?当我去现场时,它是第十排。 – Vallentin

0

如果你只是想获得的第一个标签,你可以使用href的区别并使用正则表达式来匹配相应的标签;例如在href第一个标签与CNY结束,用re模块与正则表达式CNY$匹配href属性:

import re 
soup.find("a", {"href": re.compile("CNY$")}).text 
# '6.888069' 
+0

非常感谢你!得到它了 –

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' 

在这种情况下,我们发现了第二个表,则该表的第三行,然后该行的第一和第三单元。

相关问题