我有一个循环,它扫描网站中的特定元素,然后将其抓取并放在列表中,然后将其放入字符串变量中。
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','')
答案 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编码。您可能会发现这些响应似乎更有意义,并且您不需要剔除太多“过分”的内容。