2017-12-15 4 views
-3

코딩이 새로워졌습니다. coinmarketcap에서 litecoin의 현재 가격을 가져 오는 코드를 작성하려고했습니다. 그러나, 나는 그것을 작동시킬 수 없다, 그것은 인쇄 및 빈 목록.파이썬으로 웹을 긁어내는 데 문제가 있습니다.

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) 

Out은 "[]"입니다. 문제는 사소한 것이지만 도움을 주시면 감사하겠습니다.

+0

코드에서 작은 따옴표를 사용했지만 스택 오버플로가 바로 "span class ="text-large2 "data-currency-value =" "> 304.08"에서 $ 304.08로 바로 변환되었습니다. –

+4

정규 표현식은 일반적으로 HTML을 처리하기위한 최상의 도구가 아닙니다. [BeautifulSoup] (https://www.crummy.com/software/BeautifulSoup/)와 같은 것을 살펴 보는 것이 좋습니다. 그건 제쳐두고, 당신의'regex' 패턴은 아마도 당신이 생각하는 것을하지 않을 것입니다. [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?

관련 문제