2016-07-02 2 views
0

독일어로 된 웹 사이트의 데이터 일부를 다 써야합니다. 코드는 다음과 같다 : 다음과 같이ut8로 디코딩하면 작동하지 않습니다. 파이썬

# -*- coding: utf-8 -*- 
from bs4 import BeautifulSoup 
import urllib2, requests 
import time, sys 
from selenium import webdriver 
import os, sys 

reload(sys) 
sys.setdefaultencoding('utf-8') 
chromedriver = "./chromedriver" 
os.environ["webdriver.chrome.driver"] = chromedriver 
URL = 'http://de.vroniplag.wikia.com/' 

def gethtml(link): 

    req = urllib2.Request(link, headers={'User-Agent': "Magic Browser"}) 
    con = urllib2.urlopen(req) 
    html = con.read() 
    return html 


Soup = lambda x: BeautifulSoup(x, 'html.parser') 

def getplagtags(url): 

    soup = Soup(gethtml(url)) 
    frgtab = soup.find('table', attrs={'class': 'ueberpruefte-fragmentseiten'}) 
    frgs = [e['href'] for e in frgtab.findAll('a') if e['href'] and 'Seite nicht vorhanden' not in e['title']] 

    lst=[] 
    driver = webdriver.Chrome(chromedriver) 
    print frgs 
    for frg in frgs[0:1]: 
     url=URL+frg[1:] 
     print url 
     driver.get(url) 
     for tag in driver.find_elements_by_css_selector('[class^=fragmark]'): 
      lst.append([tag.get_attribute('class'),tag.text.encode('utf-8')]) 
    driver.quit() 
    print lst 


getplagtags('http://de.vroniplag.wikia.com/wiki/Aaf') 

결과는 다음과 같습니다

[[u'fragmark1', 'Verursacher von Infektionen in Krankenh\xc3\xa4usern und'], [u'fragmark2', 'auch in der Bev\xc3\xb6lkerung.'], [u'fragmark3', 'zwei Jahre nach der'], [u'fragmark4', 'des semisynthetischen Penicillin Methicillin,'], [u'fragmark5', 'zur Behandlung von Penicillin-resistentem S. aureus'], [u'fragmark6', 'in einem Krankenhaus in Boston'], [u'fragmark7', 'im Jahr 2006 circa 19.000 Menschen an MRSA-Infektionen.'], [u'fragmark8', 'die Zahl der station\xc3\xa4r behandelten MRSA-Infektionen'], [u'fragmark9', 'zwischen 700 und 1.500 Personen an einer'], [u'fragmark1', 'Die Zahl der Infizierten'], [u'fragmark2', 'Mortalit\xc3\xa4t der Patienten durch schwerwiegende Erkrankungen wie'], [u'fragmark3', 'oder Staphylococcal Scaled Skin Syndrome.'], [u'fragmark4', 'Kosten f\xc3\xbcr das Gesundheitssystem.'], [u'fragmark5', 'in der gegenw\xc3\xa4rtigen Forschung'], [u'fragmark6', 'sind.'], [u'fragmark6', '1.1. Methicillin-resistenter'], [u'fragmark7', 'durch Resistenzen gegen\xc3\xbcber allen Betalaktamantibiotika'], [u'fragmark8', 'als minimale Oxacillin-Hemmkonzentration von \xe2\x89\xa5 4 \xce\xbcg/mL.'], [u'fragmark9', 'einem mobilen genetischen Element.'], [u'fragmark1', 'Durch den Repressor MecI und den Tranducer MecRi'], [u'fragmark2', 'bekannt. Das mecA-Gen kodiert f\xc3\xbcr ein'], [u'fragmark7', 'Jevons MP, Coe AW, Parker MT. Methicillin resistance in staphylococci. Lancet 1963; 1:904-907'], [u'fragmark3', 'Barber M. Methicillin resistant staphylococci. J Clin Path'], [u'fragmark4', 'Barrett FF, McGehee RF Jr, Finland M. Methicillin-resistant Staphylococcus aureus at Boston City Hospital. Bacteriologic and epidemiologic observations. N Engl J Med 1968; 279;441-448'], [u'fragmark1', 'Klevens et al.: Invasive Methicillin-Resistant Staphylococcus aureus Infections in the United States. JAMA 298/15/2007. S. 1763'], [u'fragmark8', 'Klein E, Smith DL, Laxmiranayan R. Hospitalizations and deaths caused by Methicillin-resistant Staphylococcus aureus, United States, 1999'], [u'fragmark9', 'Infect Dis 2007; 13(12):1840-1846'], [u'fragmark2', 'Noskin GA, Rubin RJ,'], [u'fragmark3', 'et al. The burden of Staphylococcus'], [u'fragmark4', 'on hospitals in the United States: an analysis of the 2000 and 2001 Nationwide'], [u'fragmark5', 'Sample Database. Arch Intern Med 2005; 165:1756-1761'], [u'fragmark5', 'Deurenberg RH, Stobberingh EE. The evolution of Staphylococcus aureus. Infect'], [u'fragmark6', 'Evol. 2008 Jul 29.'], [u'fragmark1', 'Verursacher von Infektionen in Krankenh\xc3\xa4usern und'], [u'fragmark2', 'auch in der Bev\xc3\xb6lkerung.'], [u'fragmark3', 'zwei Jahre nach der'], [u'fragmark4', 'des semisynthetischen Penicillin Methicillin'], [u'fragmark5', 'zur Behandlung von Penicillin-resistentem S. aureus'], [u'fragmark6', 'in einem Krankenhaus in Boston'], [u'fragmark7', 'im Jahr 2006 circa 19.000 Menschen an MRSA-Infektionen'], [u'fragmark8', 'die Zahl der station\xc3\xa4r behandelten MRSA-Infektionen'], [u'fragmark9', 'zwischen 700 und 1.500 Personen an einer'], [u'fragmark1', 'die Zahl der Infizierten'], [u'fragmark2', 'Mortalit\xc3\xa4t der Patienten durch schwerwiegende Erkrankungen wie'], [u'fragmark3', 'oder Staphylococcal Scaled Skin Syndrome'], [u'fragmark4', 'Kosten f\xc3\xbcr das Gesundheitssystem,'], [u'fragmark5', 'in der gegenw\xc3\xa4rtigen Forschung'], [u'fragmark6', 'sind.'], [u'fragmark6', '1.1 Methicillin-resistenter'], [u'fragmark7', 'durch Resistenzen gegen\xc3\xbcber allen Betalaktamantibiotika'], [u'fragmark8', 'als minimale Oxacillin-Hemmkonzentration von \xe2\x89\xa5 4 \xce\xbcg/mL.'], [u'fragmark9', 'einem mobilen genetischen Element,'], [u'fragmark1', 'durch den Repressor MecI und den Tranducer MecRi'], [u'fragmark2', 'bekannt. Das mecA-Gen kodiert f\xc3\xbcr ein'], [u'fragmark3', 'Barber M. Methicillin resistant staphylococci. J Clin Path'], [u'fragmark4', 'Barrett FF, McGehee RF Jr, Finland M. Methicillin-resistant Staphylococcus aureus at Boston City Hospital. Bacteriologic and epidemiologic observations. N Engl J Med 1968; 279;441-448'], [u'fragmark5', 'Deurenberg RH, Stobberingh EE. The evolution of Staphylococcus aureus. Infect'], [u'fragmark6', 'Evol. 2008 Jul 29'], [u'fragmark7', 'Jevons MP, Coe AW, Parker MT. Methicillin resistance in staphylococci. Lancet 1963; 1:904-907'], [u'fragmark8', 'Klein E, Smith DL, Laxmiranayan R. Hospitalizations and deaths caused by Methicillin-resistant Staphylococcus aureus, United States, 1999'], [u'fragmark9', 'Infect Dis 2007; 13(12):1840-1846'], [u'fragmark1', 'Klevens et al.: Invasive Methicillin-Resistant Staphylococcus aureus Infections in the United States. JAMA 298/15/2007. S. 1763'], [u'fragmark2', 'Noskin GA, Rubin RJ,'], [u'fragmark3', 'et al. The burden of Staphylococcus'], [u'fragmark4', 'on hospitals in the United States: an analysis of the 2000 and 2001 Nationwide'], [u'fragmark5', 'Sample Database. Arch Intern Med 2005; 165:1756- 1761']] 

내 질문 결과의 텍스트 (각 목록의 두 번째 요소)에도 불구하고, 유니 코드에없는 이유 사실 나는 encode 함수를 사용하고있다.

업데이트 : setdefaultencoding 및 encode 기능을 제거했습니다. 이제 다음 결과를 얻을 수 있습니다.

[[u'fragmark1', u'Verursacher von Infektionen in Krankenh\xe4usern und'], [u'fragmark2', u'auch in der Bev\xf6lkerung.'], [u'fragmark3', u'zwei Jahre nach der'], [u'fragmark4', u'des semisynthetischen Penicillin Methicillin,'], [u'fragmark5', u'zur Behandlung von Penicillin-resistentem S. aureus'], [u'fragmark6', u'in einem Krankenhaus in Boston'], [u'fragmark7', u'im Jahr 2006 circa 19.000 Menschen an MRSA-Infektionen.'], [u'fragmark8', u'die Zahl der station\xe4r behandelten MRSA-Infektionen'], [u'fragmark9', u'zwischen 700 und 1.500 Personen an einer'], [u'fragmark1', u'Die Zahl der Infizierten'], [u'fragmark2', u'Mortalit\xe4t der Patienten durch schwerwiegende Erkrankungen wie'], [u'fragmark3', u'oder Staphylococcal Scaled Skin Syndrome.'], [u'fragmark4', u'Kosten f\xfcr das Gesundheitssystem.'], [u'fragmark5', u'in der gegenw\xe4rtigen Forschung'], [u'fragmark6', u'sind.'], [u'fragmark6', u'1.1. Methicillin-resistenter'], [u'fragmark7', u'durch Resistenzen gegen\xfcber allen Betalaktamantibiotika'], [u'fragmark8', u'als minimale Oxacillin-Hemmkonzentration von \u2265 4 \u03bcg/mL.'], [u'fragmark9', u'einem mobilen genetischen Element.'], [u'fragmark1', u'Durch den Repressor MecI und den Tranducer MecRi'], [u'fragmark2', u'bekannt. Das mecA-Gen kodiert f\xfcr ein'], [u'fragmark7', u'Jevons MP, Coe AW, Parker MT. Methicillin resistance in staphylococci. Lancet 1963; 1:904-907'], [u'fragmark3', u'Barber M. Methicillin resistant staphylococci. J Clin Path'], [u'fragmark4', u'Barrett FF, McGehee RF Jr, Finland M. Methicillin-resistant Staphylococcus aureus at Boston City Hospital. Bacteriologic and epidemiologic observations. N Engl J Med 1968; 279;441-448'], [u'fragmark1', u'Klevens et al.: Invasive Methicillin-Resistant Staphylococcus aureus Infections in the United States. JAMA 298/15/2007. S. 1763'], [u'fragmark8', u'Klein E, Smith DL, Laxmiranayan R. Hospitalizations and deaths caused by Methicillin-resistant Staphylococcus aureus, United States, 1999'], [u'fragmark9', u'Infect Dis 2007; 13(12):1840-1846'], [u'fragmark2', u'Noskin GA, Rubin RJ,'], [u'fragmark3', u'et al. The burden of Staphylococcus'], [u'fragmark4', u'on hospitals in the United States: an analysis of the 2000 and 2001 Nationwide'], [u'fragmark5', u'Sample Database. Arch Intern Med 2005; 165:1756-1761'], [u'fragmark5', u'Deurenberg RH, Stobberingh EE. The evolution of Staphylococcus aureus. Infect'], [u'fragmark6', u'Evol. 2008 Jul 29.'], [u'fragmark1', u'Verursacher von Infektionen in Krankenh\xe4usern und'], [u'fragmark2', u'auch in der Bev\xf6lkerung.'], [u'fragmark3', u'zwei Jahre nach der'], [u'fragmark4', u'des semisynthetischen Penicillin Methicillin'], [u'fragmark5', u'zur Behandlung von Penicillin-resistentem S. aureus'], [u'fragmark6', u'in einem Krankenhaus in Boston'], [u'fragmark7', u'im Jahr 2006 circa 19.000 Menschen an MRSA-Infektionen'], [u'fragmark8', u'die Zahl der station\xe4r behandelten MRSA-Infektionen'], [u'fragmark9', u'zwischen 700 und 1.500 Personen an einer'], [u'fragmark1', u'die Zahl der Infizierten'], [u'fragmark2', u'Mortalit\xe4t der Patienten durch schwerwiegende Erkrankungen wie'], [u'fragmark3', u'oder Staphylococcal Scaled Skin Syndrome'], [u'fragmark4', u'Kosten f\xfcr das Gesundheitssystem,'], [u'fragmark5', u'in der gegenw\xe4rtigen Forschung'], [u'fragmark6', u'sind.'], [u'fragmark6', u'1.1 Methicillin-resistenter'], [u'fragmark7', u'durch Resistenzen gegen\xfcber allen Betalaktamantibiotika'], [u'fragmark8', u'als minimale Oxacillin-Hemmkonzentration von \u2265 4 \u03bcg/mL.'], [u'fragmark9', u'einem mobilen genetischen Element,'], [u'fragmark1', u'durch den Repressor MecI und den Tranducer MecRi'], [u'fragmark2', u'bekannt. Das mecA-Gen kodiert f\xfcr ein'], [u'fragmark3', u'Barber M. Methicillin resistant staphylococci. J Clin Path'], [u'fragmark4', u'Barrett FF, McGehee RF Jr, Finland M. Methicillin-resistant Staphylococcus aureus at Boston City Hospital. Bacteriologic and epidemiologic observations. N Engl J Med 1968; 279;441-448'], [u'fragmark5', u'Deurenberg RH, Stobberingh EE. The evolution of Staphylococcus aureus. Infect'], [u'fragmark6', u'Evol. 2008 Jul 29'], [u'fragmark7', u'Jevons MP, Coe AW, Parker MT. Methicillin resistance in staphylococci. Lancet 1963; 1:904-907'], [u'fragmark8', u'Klein E, Smith DL, Laxmiranayan R. Hospitalizations and deaths caused by Methicillin-resistant Staphylococcus aureus, United States, 1999'], [u'fragmark9', u'Infect Dis 2007; 13(12):1840-1846'], [u'fragmark1', u'Klevens et al.: Invasive Methicillin-Resistant Staphylococcus aureus Infections in the United States. JAMA 298/15/2007. S. 1763'], [u'fragmark2', u'Noskin GA, Rubin RJ,'], [u'fragmark3', u'et al. The burden of Staphylococcus'], [u'fragmark4', u'on hospitals in the United States: an analysis of the 2000 and 2001 Nationwide'], [u'fragmark5', u'Sample Database. Arch Intern Med 2005; 165:1756- 1761']] 
+1

,

[tag.get_attribute('class'),tag.text] 

는 또한 reload(sys)sys.setdefaultencoding('utf-8')을 피하기 : tag.text.encode('utf-8')은 분명히 당신이 이미 유니 코드 문자열을 가지고 단지 tag.text를 호출을 요청 정확히 무엇을 제공합니다. –

+0

UTF-8로 성공적으로 인코딩되었으므로 각 하위 목록의 두 번째 요소는'u '로 시작하지 않고 ** \ xhh의 ASCII 표현 범위를 벗어나는 바이트 표현을 포함합니다. '\ xc3 \ xa4'는 U + 00E4'ä '코드 포인트에 대한 UTF-8 인코딩 인 C3 A4 바이트의 * 표현 *입니다. –

+0

@MartijnPieters 그렇다면 어떻게 그 문자를 변환 할 수 있습니까? –

답변

2

str에서 유니 코드로 디코드하고 유니 코드에서 str로 인코딩합니다. 당신이 그것을 인코딩 ** 때문에 ** 그것은 유니 코드이 아니다 why-should-we-not-use-sys-setdefaultencodingutf-8-in-a-py-script

+0

안녕하세요! 당신이 말하는대로 문자는 이제 유니 코드입니다. 하지만 일부 캐릭터는 변환되지 않았습니다. 어떻게해야합니까? –

+0

@EchchamaNayak, 정확히 변환되지 않았습니까? 'gegen \ xfcber'와 같은 것에 대해 이야기하고 있습니까? 즉 repr 표현은 http://stackoverflow.com/questions/7784148/understanding-repr-function-in-python –

+0

예 그게 무슨 뜻입니까 –