2013-05-12 3 views
0

여기 예제의 일부를 읽고 그러나 나는 ... 나는 그 중 일부를 이해하지 않고 다른 사람이 작동하지 않는 것 (I는 초보자 해요 아마 있기 때문에 이러한 초보자입니다바이트를 문자열로 변환하거나 문자열을 바이트로 변환 하시겠습니까?

import urllib.request 
import re 
Symbols = ['aapl', 'spy' , 'goog' , 'nflx'] 
i = 0 
while i < len(Symbols): 
    Yahoo='http://finance.yahoo.com/q?s=' + Symbols[i] 
    htmlfile = urllib.request.urlopen(Yahoo) 
    htmltext = htmlfile.read() 
    string = Symbols[i] 
    symbol = string.encode('utf-8') 
    pattern= re.compile(b'<span id="yfs_l84_'+ symbol +'">(.+?)</span>') 
    price= re.findall(pattern, htmltext) 
    print('The price of' + str(Symbols[i]) + ' is ' + str(price)) 
    i+=1 

이 내가 STR 바이트를 연결하는 애 쓰고 re.compile 문으로 인해 작동하지 않습니다.

을 나중에 기호 목록을 반복하고 최신 주가를 긁어 수 있도록 내가 바이트 문자열로 변환해야

거기에 내 문법에 문제가 있다는 느낌이 들었습니다. d 예제와 파이썬 문서에는 'utf-8'문자열 인 '인코딩'에 대한 인수가 있지만 실제로 알지 못합니다.

누군가가 도와 줄 수 있습니까?

편집 : 그것이 작동하는 유일한 방법이기 때문에 여기에서 바이트를 사용하고 있는데, 그렇지 않으면 바이트로 변경하는 오류가 발생합니다 (3.3 사용).

오류는 이것이다 :

Traceback (most recent call last): 
    File "C:\Users\Deaven And Teigan\Documents\Python Projects\YahooFinance.py", line 14, in <module> 
    pattern= re.compile(b'<span id="yfs_l84_'+ symbol +'">(.+?)</span>') 
TypeError: can't concat bytes to str 
+0

왜 정규식을 바이트 문자열로 만드나요? 또한 질문과 함께 스택 추적 및 예외를 게시하십시오. –

+0

@Lattyware, TypeError : 바이트와 같은 객체에 문자열 패턴을 사용할 수 없습니다. –

답변

1

당신이 바로 당신이 실제로 코드에서 네트워크 요청이 아닌 혼합 문자열과 바이트를 확인하려는 지점까지의 문자열과 함께 작동합니다. 일반적으로 먹는 것, 문자열은 문자의 추상적 표현이며 바이트는 네트워크를 통해 전송할 수있는 일련의 바이트에 대한 문자열의 특정 인코딩 (예 : Utf-8)입니다. 대신

r'<span id="yfs_l84_' 
+0

위의 질문에 언급 된 오류가 전달되었습니다. 하지만 새로운 오류가 발생합니다. find_all에 return _compile (pattern, flags) .findall (string) 파일 "C : \ Python33 \ lib \ re.py"파일을 찾을 수 없습니다. TypeError : 사용할 수 없습니다. 바이트와 ​​같은 객체의 문자열 패턴 –

+0

url 요청의 데이터를 'htmltext' 변수로 읽을 때 byes 객체를 얻을 것이라고 생각합니다. 응답 데이터를 더 의미있는 것으로 파싱해야합니다 (예 : http 응답이 어떻게 인코딩되는지를 확인한 다음 그것을 사용하여 문자열로 다시 가져온 바이트를 디코딩해야합니다. 그런 다음 결과 문자열에서 정규식을 수행 할 수 있습니다. –

0

문자열 = 바이트 (기호 [I], 'UTF-8')

+0

완료, 감사합니다 모두 –

0
를 사용

pattern= re.compile(b'<span id="yfs_l84_'+ symbol +'">(.+?)</span>') 

:

은 아마 당신은이 라인에 대한 원시 문자열을 사용하려면

import urllib.request 
import re 
Symbols = ['aapl', 'spy' , 'goog' , 'nflx'] 
i = 0 
while i < len(Symbols): 
Yahoo='http://finance.yahoo.com/q?s=' + Symbols[i] 
htmlfile = urllib.request.urlopen(Yahoo) 
htmltext = htmlfile.read() 
string = Symbols[i] 
symbol = string.encode('utf-8') 
pattern= re.compile(b'<span id="yfs_l84_'+ symbol +b'">(.+?)</span>') 
price= re.findall(pattern, htmltext) 
print('The price of' + str(Symbols[i]) + ' is ' + str(price)) 
i+=1 


Hai try this it works 
+0

아니, 주로 당신이 제대로 들여 쓰기를하지 않았기 때문에. –

관련 문제