2017-12-15 12 views
-3

私はコーディングにはとても新しいので、coinmarketcapからlitecoinの現在の価格をインポートするコードを書こうとしました。しかし、私はそれを動作させることはできません、それは印刷し、空のリスト。私はPythonへのウェブスクレイピングに問題があります

import urllib 
import re 

htmlfile = urllib.urlopen('https://coinmarketcap.com/currencies/litecoin/') 

htmltext = htmlfile.read() 

regex = 'span class="text-large2" data-currency-value="">$304.08</span>' 

pattern = re.compile(regex) 

price = re.findall(pattern, htmltext) 

print(price) 

アウトは "[]"となります。問題はおそらく軽微ですが、私は非常に助けに感謝しています。

+0

私のコードでは一重引用符を使用しましたが、スタックオーバーフローは "span class =" text-large2 "data-currency-value =" "> $ 304.08"から$ 304.08に直接変換されました。 –

+4

通常、正規表現はHTMLを処理するための最良のツールではありません。私は[BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/)のようなものを見ることをお勧めします。それはさておき、あなたの '正規表現'パターンはおそらくあなたが考えるべきことをしません。 [documentation](https://docs.python.org/3.4/library/re.html)を確認してください。 – Galen

+1

リ – Simon

答えて

0

RegExを変更し、括弧でグループを追加して値を取得する必要があります。あなたは、この正規表現を必要とし、<span class="text-large2" data-currency-value>300.59</span>

は次のように一致させるようにしてください(.*?)グループは、番号をキャッチするために使用される

regex = 'span class="text-large2" data-currency-value>(.*?)</span>' 

。あなたが得る

['300.59'] 
1

正規表現は、一般的に処理HTMLのための最適なツールではありません。私はBeautifulSoupのようなものを見ることをお勧めします。例えば

import urllib 
import bs4 

f = urllib.urlopen("https://coinmarketcap.com/currencies/litecoin/") 
soup = bs4.BeautifulSoup(f) 
print(soup.find("", {"data-currency-value": True}).text) 

これは、現在、 "299.97" を出力します。

この単純なケースでは、これはおそらくreを使用するだけでは機能しません。しかし、Using regular expressions to parse HTML: why not?

関連する問題