Как избавиться от \ ufeff на html-странице - PullRequest
1 голос
/ 30 июня 2019

Код

!wget -q -O 'boroughs.html' "https://en.wikipedia.org/wiki/List_of_London_boroughs"

with open('boroughs.html', encoding='utf-8-sig') as fp:
    soup = BeautifulSoup(fp,"lxml")


data = []
table = soup.find("table", { "class" : "wikitable sortable" })
table_body = table.find('tbody')
rows = table_body.find_all('tr')
for row in rows:
    cols = row.find_all('td')
    cols = [col.text.strip() for col in cols]
    data.append([col for col in cols]) # Get rid of empty values
data

Я добавил encoding='utf-8-sig', чтобы открыть после некоторого исследования.Но в выводе я все еще вижу символы \ ufeff:

Что меня озадачивает, я даже попробовал хакерский способ с

df = df.replace(u'\ufeff', '') 

после добавления данных вpandas dataframe

И символы все еще там.

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Я попробовал ваш код, используя Python 3.6.1 с простым str.replace(u'\ufeff', ''), и, похоже, он работает.

Код проверен:

import os
from bs4 import BeautifulSoup

os.system('wget -q -O "boroughs.html" "https://en.wikipedia.org/wiki/List_of_London_boroughs"')

with open('boroughs.html', encoding='utf-8-sig') as fp:
    soup = BeautifulSoup(fp,"lxml")

data = []
table = soup.find("table", { "class" : "wikitable sortable" })
table_body = table.find('tbody')
rows = table_body.find_all('tr')
for row in rows:
    cols = row.find_all('td')
    cols = [col.text.strip() for col in cols]
    data.append([col.replace(u'\ufeff', '') for col in cols])
print(data)

Вывод перед заменой:

[[], ['Лай и Дагенхам [примечание 1]', '', '', 'Лай и Дагенхем Лондонский городской совет »,« Труда »,« Ратуша, 1 Городская площадь », '13,93 ',' 194,352 ', '51 ° 33′39 ″ с.ш. 0 ° 09′21 ″ в.д. / ufeff51,5607 ° с.ш. 0,1557 ° E / ufeff / 51,5607; 0.1557 \ ufeff (Barking and Dagenham) ',' 25 '], ...]

Выход после замены:

[[], ['Лай и Дагенхам [примечание 1]', '', '', 'Лай и Дагенхем Лондонский городской совет »,« Труда »,« Ратуша, 1 Городская площадь », '13,93 ',' 194,352 ', '51 ° 33′39 ″ с.ш. 0 ° 09′21 ″ в.д. / 51,5607 ° N0,1557 ° в.д. / 51,5607; 0,1557 (Лай и Дагенхем) ',' 25 '], ...]

0 голосов
/ 30 июня 2019

Попробуйте использовать utf8 вместо:

with open('boroughs.html', encoding='utf8') as fp:
    doc = html.fromstring(fp.read())

    data = []
    rows = doc.xpath("//table/tbody/tr")
    for row in rows:
        cols = row.xpath("./td/text()")
        cols = [col.strip() for col in cols if col.strip()]
        data.append(cols)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...