2017-08-31 1 views
-1

Etwas Hintergrund.encode ('utf-8') tut absolut nichts

Ich arbeite an einem kleinen Programm für das Geschäft eines Freundes. In seinem Geschäft durchläuft er manuell eine Website mit einer Liste von Unternehmenswebsites, mit denen er arbeitet. Die Liste hat Hunderte von Unternehmen. Alles, was er tut, ist, die Kontaktdaten zu bekommen und sie in eine Excel-Datei zu bringen.

wieder macht er das manuell ... Er sagte, er wird Stunden damit verbringen.

Ich möchte versuchen, dies mit Python zu automatisieren. Ich bin Autodidakt mit etwa einem Monat Erfahrung.

Im Moment habe ich ein Programm, das erfolgreich eine Website für nur den Text scrapt. Allerdings fügt es den Text in eine Liste von Unicode-Zeichenfolgen ein, aber aus irgendeinem Grund wird die Liste nicht in utf-8 konvertiert, so dass ich damit arbeiten kann.

import re 
import urllib 
from bs4 import BeautifulSoup 

#url = raw_input("Please enter a url: ") 

html = urllib.urlopen("http://www.cerecor.com/contact") 
soup = BeautifulSoup(html, "lxml") 
data = soup.findAll(text=True) 

def visible(element): 
    if element.parent.name in ['style', 'script', '[document]', 'head', 'title']: 
     return False 
    elif re.match('<!--.*-->', str(element.encode('utf-8'))): 
     return False 
    return True 

result = filter(visible, data) 

[x.encode('UTF8') for x in result] 
#result = ','.join(result) 
number = u"(\+?1?.?\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[- 
\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})" 

print result 

#numbers = [re.findall(number, x) for x in result] 

und der Ausgang [U ' ' S u '\ n', U'', u '\ n', u '\ n', u '\ n', u '\ n' , \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u \ n ', n \' \ n ', uHome', u '\ n', u '\ n', u'About ', u' \ n ', u' \ n ', u 'Overview', u '\ n', u'Management Team ', u' \ n ', u'Board of Directors', u '\ n', u u'Pipeline ', u' \ n ', u' \ n ', u'Übersicht', u '\ n', u'CERC-301 ', u' \ n ', u'CERC-611', u '\ n', u'CERC-406 ', u' \ n ', u'Related Publications ' ',' \ n ','Patient Resources', \ 'n \', \ '', \ '', \ 'Investoren \', \ 'n \' , u '\ n', u'Überblick ', u' \ n ', u'News/Ereignisse', u '\ n', u'C ', u' \ n ', u'Analyst Coverage', u '\ n','Stock Data ',' \ n ','SEC Filings', u '\ n', uCorporate Gov ernance ', u' \ n ', u' \ n ', u' ', u' s ', u' \ n ', u' ', u' \ n ', u'Careers', u '\ n ', du', du ', du', du ', du', du ', du', du ', du' n ', du , u '\ n', u '\ n', u '\ n', s ', u' \ n ', u "Wir würden uns freuen, von Ihnen zu hören", u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' Kontakt ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', 'n', n ', u'Name', u '\ n', u '\ n', u '\ n', u '\ n', u'Email ', \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u'Unternehmen', u '\ n', u '\ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u'Wählen Sie Option', u '\ n', 'Allgemeine Anfragen', u '\ n ',' Partnerschaften ',' u 'n', '' Lizenzierung ',' '', '' Public Relat vestor Beziehungen ', u' \ n ', u' \ n ', u' \ n ' , u '\ n', u '\ n', u 'Nachricht', u '\ n', u '\ n', u '\ n', u '\ n', u '\ n', u ' \ n ', u' \ n ', u' \ n ', u' \ n ', u , u' \ n ', u' \ n ', u' \ n ', u'Cerecor, Inc.' , u '\ n', u '\ r \ n 400 East Pratt Street', u 'Su \ tBaltimore, MD 21202 \ t \ t ', u' \ n ', u' \ r \ n \ t Tel: 410-522-8707 \ r \ n \ t \ t ', u' \ n 'u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u'Über uns', u '\ n', u '\ n ', du' n ', du' n ', du' n ', du' pipeline ', du' n ', du' n ', du' n ', du' n ', du ' u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u' \ n ', u '\ r \ n \ t \ t \ t \ xa9 2017', u'Cerecor, Inc. ', u' ', u' \ n ', u' \ n ', u' Datenschutz Haftungsausschluss ', u' \ n ', uSitemap', u '\ n', u '\ n', u '\ n', u '\ n', u '\ n', u '\ n', u '\ n' , u '\ n', u '', u '// general-wrapper', u '\ n', u '\ n']

Alle Ratschläge wären hilfreich. Ich möchte es nur auf eine Zeichenfolge mit all dem Text oder einer Liste, damit ich es mit Regex suchen kann.

+0

Die Standard-Codierung bereits UTF-8 ist ... siehe: https://docs.python.org/3/howto/unicode.html – alfasin

+0

Sie sollten sicherstellen, dass der Typ des Regex-Musters derselbe ist wie der Typ des Strings. In Ihrem Fall ist die Nummer Unicode, aber x ist str (Bytes). – stamaimer

+0

yeah du hast Recht, ich habe es in Unicode nur um dick damit herum, weil ich nicht herausfinden konnte, warum sie nicht in eine Zeichenfolge konvertieren –

Antwort

0

Da String-Typen in Python unveränderlich sind, ändert x.encode() die Unicode-Strings nicht direkt, sondern gibt die codierte Version zurück.

können Sie versuchen:

result = [x.encode('UTF8') for x in result] 
+0

Sie sind ein Lebensretter. Es sind immer die einfachsten Dinge, die dich daran hindern, sich zu entwickeln, danke nochmal! –