2017-04-26 8 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> 

は、私がどのように私は「」タグの間にコンテンツを抽出することができますことをお願いしてもいいですか? 結果の6行目に6.887711を取得したいとします。Pythonで2つのタグの間の数字を抽出する方法は?

答えて

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番目の行です。私がサイトに行くとき、それは10行目です。 – Vallentin

0

、あなたがhrefを利用することができます差をつけて正規表現と対応するタグを使用してください。それはxpathが利用できるようにするので、あなたはlxmlのライブラリを使用して検討するかもしれない。このような状況では

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

ありがとうございました!とった –

0

:たとえば最初のタグ用hrefhref属性と一致する正規表現CNY$reモジュールを使用して、CNYで終わります。

>>> 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' 

この場合、私は2番目のテーブル、次にそのテーブルの3番目の行、そしてその行の1番目と3番目のセルを見つけました。

関連する問題