2017-09-29 2 views
1

Le script ci-dessous RENDEMENTS 'UnicodeEncode Error: 'ascii' codec can't encode character '\xf8' in position 118: ordinal not in range(128)'Comment éviter UnicodeEncodeError « XF8 » lorsque la table de grattage avec beautifulsoup

et je ne peux pas trouver une bonne explication.

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
import pandas as pd 

results = {} 

for page_num in range(0, 1000, 20): 
    address = 'https://www.proff.no/nyetableringer?industryCode=p441&fromDate=22.01.2007&location=Nord-Norge&locationId=N&offset=' + str(page_num) + '&industry=Entreprenører' 

    html = urlopen(address) 
    soup = BeautifulSoup(html, 'lxml') 
    table = soup.find_all(class_='table-condensed') 
    output = pd.read_html(str(table))[0] 
    results[page_num] = output 


df = pd.concat([v for v in results.values()], axis = 0) 

Répondre

1

Vous utilisez la bibliothèque std pour ouvrir l'URL. Cette bibliothèque force l'adresse à être codée en ascii. Par conséquent, les caractères non ascii comme ø lanceront une erreur Unicode.

Line 1116-1117 de http/client.py

# Non-ASCII characters should have been eliminated earlier 
    self._output(request.encode('ascii')) 

Comme alternative à urllib.request, les demandes 3ème partie est grande.

import requests 

address = 'https://www.proff.no/nyetableringer?industryCode=p441&fromDate=22.01.2007&location=Nord-Norge&locationId=N&offset=' + str(page_num) + '&industry=Entreprenører' 
html = requests.get(address).text