2017-04-07 4 views
2

웹 페이지 (이 경우 nytimes.com)에서 모든 기사 제목을 가져 오는 urllib 프로그램을 작성했습니다. 단 하나의 문제가 있습니다. 일부 제목에는 세미콜론이있어서 인쇄 할 경우 추한 "There \ xe2 \ x80 \ x99s"가됩니다. 그래서 \ xe2 \ x80 \ x99를 '로 대체하려고 시도했지만 작동하지 않는 것 같습니다. 나는 튜플 (Tuples)에 문제가 있다고 생각합니다. 불행히도 튜플을 만들 수 없으므로 동일한 문제가 발생합니다.Python3 : urllib로 얻은 데이터 편집하기

import urllib.request 
import urllib.parse 
import re 

url = 'https://www.nytimes.com/' 
headers = {} 
headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux i686)' 

req = urllib.request.Request(url, headers = headers) 
resp = urllib.request.urlopen(req) 
resp_data = resp.read() 
par = re.findall(r'story-heading"><a href="(.*?)">(.*?)</a>',str(resp_data)) 

for n in par: 
print(n[1]) 
print(n[1].replace("\xe2\x80\x99","'")) 

튜플에서 문자열 변수를 만들려고했지만 아무것도 작동하지 않습니다. 나는 BeautifulSoup와 함께 이것에 대한 또 다른 해결책이 있다는 것을 알고 있지만 나는 내 자신의 길을 찾으려고 노력할 것이라고 생각했습니다.

답변

0

당신의 N 포장 당신이 한 줄 변경해야합니다 :

resp_data = resp.read() 

에 :

resp_data = resp.read().decode("utf8") 

그리고 작업이 완료됩니다.

해설 : 내가 추측하고있어 당신이 더 나은 당신이 의도처럼 표현 될 수있는 utf8 문자열로 반환 된 바이트 가지고 decode에 그래서

이 웹 사이트는, ut8 인코딩을 사용하고 있습니다.

PS : 당신은 decode() 방법으로 인수없이 resp.read().decode()를 사용하고 인코딩 유형을 추측 Python을 할 수 있습니다.

+0

그것은 효과가있다. Tyvm :-) –

+0

희망이 당신을 돕고 있습니다. 귀하가 필요로하는 것을 충족 시키면이 답변을 upvote 및/또는 수락 할 수 있습니다. –

+1

감사합니다. 이 포럼의 새로운 내용 –

0

문자열의 repr(), 즉 재미있는 문자가 표시됩니다. 원한다면 문자열을 강요하십시오. 요약

>>> print repr(n[1]) 
'There\xe2\x80\x99s' 
>>> print str(n[1]) 
There’s 

: 내 결과 참조) ([1] STR에

+0

나는 이것을 이미 시도했지만 불행하게도 이것은 문제를 해결하지 못할 것이다. 그럼에도 불구하고 나는 aprec. 너의 의지. 환호 –