У меня есть цикл, который сканирует веб-сайт для определенного элемента, а затем сбрасывает его и помещает в список, а затем получает строчную переменную.
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','')
Возможно, вы неправильно обрабатываете веб-выход.
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. Вы можете обнаружить, что ответы тогда выглядят более разумными, и вам не нужно выделять так много "посторонних" вещей.