2017-04-26 253 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' 

在這種情況下,我們發現了第二個表,則該表的第三行,然後該行的第一和第三單元。

相關問題