错误的字符串输出到DF​​ Pandas Python

时间:2018-08-23 13:22:43

标签: python python-3.x pandas

我有一个循环,它扫描网站中的特定元素,然后将其抓取并放在列表中,然后将其放入字符串变量中。

Postalcode3可以很好地将DF输出到DF​​,而这又可以正确地输出到csv,但是,postalcode4不会输出任何内容,而这些单元格只是从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

我已调试它,可以看到postalcode4输出的字符串是正确的,并且格式与postalcode3相同。

Postalcode3中放置了大量的字符删除元素,因为特定的Web元素充满了无用的字符。

我不确定是怎么回事。

这就是我读取DF并插入新列的方式,该新列将由循环功能写入。

files = 'example.csv'
df = pandas.read_csv(files, index_col=0)
df.insert(5,'postcode','')

1 个答案:

答案 0 :(得分:0)

您可能没有正确处理网络输出。

content响应的requests.get属性是一个字节字符串,而HTML内容是文本。如果在创建HTML之前不对字节字符串进行解码,则很可能会发现多余的字符,因为文本中会出现编码。处理这些错误的正确方法不是继续一个字节串,而是在调用html.fromstring之前通过解码将输入的字节串转换为文本。

如果存在Content-Encoding标头,则应该真正找到正确的编码。作为实验,您可以尝试替换

tree = html.fromstring(page.content)

使用

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

因为许多网站将使用UTF8编码。您可能会发现这些响应似乎更有意义,并且您不需要剔除太多“过分”的内容。