Некорректная строка выводится в DF Pandas Python

1

У меня есть цикл, который сканирует веб-сайт для определенного элемента, а затем сбрасывает его и помещает в список, а затем получает строчную переменную.

Postalcode3 отлично выводит на DF, и это, в свою очередь, правильно выводится на csv, однако почтовый код4 не выводит ничего, и эти ячейки просто пропускаются из csv

Вот петлевая функция -

for i in range (30):
    page = requests.get('https://www.example.com'+ df.loc[i,'ga:pagePath'])
    tree = html.fromstring(page.content)
    postalcode2 = tree.xpath('//span[@itemprop="postalCode"]/text()')
    postalcode = tree.xpath('//span[@itemprop="addressRegion"]/text()')
    if not postalcode2 and not postalcode:
        print(postalcode,postalcode2)
    elif not postalcode2:
        postalcode4 = postalcode[0]
        # postalcode4 = postalcode4.replace(' ','')
        df.loc[i,'postcode'] = postalcode4
    elif not postalcode:
        postalcode3 = postalcode2[0]
        if 'Â' not in postalcode3:
            postalcode3 = postalcode3.replace('\\xa0','')
            postalcode3 = postalcode3.replace(' ','')
        else:
            postalcode3 = postalcode3.replace('\\xa0Â','')
            postalcode3 = postalcode3.replace(' ','')
    df.loc[i,'postcode'] = postalcode3

Я отлаживал его и вижу, что строка, выводимая по почтовому коду4, верна и в том же формате, что и почтовый код3.

Postalcode3 имеет нагрузку элементов удаления символов, размещенных в том виде, в котором этот конкретный веб-элемент заполняется бесполезными символами.

Я не совсем уверен, что случилось не так.

Так я читаю в DF и вставляю новый столбец, который будет записан функцией цикла.

files = 'example.csv'
df = pandas.read_csv(files, index_col=0)
df.insert(5,'postcode','')
Теги:
pandas
python-3.x

1 ответ

0

Возможно, вы неправильно обрабатываете веб-выход.

content атрибут requests.get ответа является байтовой строкой, но содержание HTML является текстом. Если вы не декодируете байт-строку перед созданием HTML-кода, вы можете найти посторонние символы из-за того, что в вашем тексте отображается кодировка. Правильный способ справиться с ними, однако, не следует продолжать с помощью bytestring, а вместо этого преобразовать входящую bytestring в текст, декодируя ее перед вызовом html.fromstring.

Вы действительно должны найти правильное кодирование, используя заголовок Content-Encoding, если оно присутствует. В качестве эксперимента вы можете попробовать заменить

tree = html.fromstring(page.content)

с

tree = html.fromstring(page.content.decode('utf-8')'

поскольку многие веб-сайты будут использовать кодировку UTF8. Вы можете обнаружить, что ответы тогда выглядят более разумными, и вам не нужно выделять так много "посторонних" вещей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню