jjxx2005 发表于 2020-8-1 10:06:39

请高手帮忙解读出错原因?

import scrapy
from C005.items import C005Item
class JklSpider(scrapy.Spider):
    name = 'jkl'
    # allowed_domains = ['www.123.com']
    start_urls = ['https://www.qiushibaike.com/']
    页码 = 1
    def parse(self, response):
      总页数 = int(response.xpath(r'//a/span/text()').extract()[-2])
      文字 = response.xpath('//a[@class="recmd-content"]/text()').extract()
      # print(文字)
      item = C005Item()
      item['文字'] = 文字
      yield item
      if self.页码 <= 总页数:
            url = f'https://www.qiushibaike.com/8hr/page/{self.页码}/'
            self.页码 += 1
            yield scrapy.Request(url=url, callback=self.parse)

我的结果是对的,所要的内容已经保存到Csv文件中了   但是返回出报了很多错误不知道如何解决,报错信息如下

Traceback (most recent call last):
File "d:\program files\python38\lib\site-packages\twisted\internet\defer.py", line 654, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
File "d:\program files\python38\lib\site-packages\scrapy\utils\defer.py", line 157, in f
    return deferred_from_coro(coro_f(*coro_args, **coro_kwargs))
File "D:\code\abc\C005\C005\pipelines.py", line 15, in process_item
    数据.to_csv('d:/百科.csv', index=False, header=0, mode='a', encoding='ANSI')
File "d:\program files\python38\lib\site-packages\pandas\core\generic.py", line 3204, in to_csv
    formatter.save()
File "d:\program files\python38\lib\site-packages\pandas\io\formats\csvs.py", line 204, in save
    self._save()
File "d:\program files\python38\lib\site-packages\pandas\io\formats\csvs.py", line 325, in _save
    self._save_chunk(start_i, end_i)
File "d:\program files\python38\lib\site-packages\pandas\io\formats\csvs.py", line 356, in _save_chunk
    libwriters.write_csv_rows(self.data, ix, self.nlevels, self.cols, self.writer)
File "pandas\_libs\writers.pyx", line 68, in pandas._libs.writers.write_csv_rows
File "d:\program files\python38\lib\encodings\mbcs.py", line 25, in encode
    return mbcs_encode(input, self.errors)
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: invalid character

_2_ 发表于 2020-8-1 10:11:20

看到错误原因明显是因为编码错误导致的
但是在你的代码里并没有看到明显的编码内容
如果不影响使用,可以忽略掉(报错的代码段加上异常处理直接 pass 即可)

_2_ 发表于 2020-8-1 10:12:07

以后请不要在代码里使用中文,会导致代码可读性变差
包括其他隐含的 BUG

Twilight6 发表于 2020-8-1 10:17:25



报错原因是编码问题,是写入的 csv 文件名含有中文引起的

解决方法就是,只要将写入的 csv 文件名改成全英文的即可

jjxx2005 发表于 2020-8-1 10:20:43

_2_ 发表于 2020-8-1 10:11
看到错误原因明显是因为编码错误导致的
但是在你的代码里并没有看到明显的编码内容
如果不影响使用,可以 ...

我在管道文件中保存代码如下、
import pandas as pd
class C005Pipeline:
    def process_item(self, item, spider):
      文字 = item['文字']
      数据 = pd.DataFrame({'a': 文字})
      数据.to_csv('d:/百科.csv', index=False, header=0, mode='a', encoding='ANSI')
      return item

我不知道为什么,encoding='ANSI'爬取的中文才不是乱码但是报错,如果改成 utf-8utf8 就不报错了但是乱码

jjxx2005 发表于 2020-8-1 10:23:15

Twilight6 发表于 2020-8-1 10:17
报错原因是编码问题,是写入的 csv 文件名含有中文引起的

解决方法就是,只要将写入的 csv 文件名改 ...

版主,我改成英文文件名问题依就

我在管道文件中保存代码如下、
import pandas as pd
class C005Pipeline:
    def process_item(self, item, spider):
      文字 = item['文字']
      数据 = pd.DataFrame({'a': 文字})
      数据.to_csv('d:/abc.csv', index=False, header=0, mode='a', encoding='ANSI')
      return item

我不知道为什么,encoding='ANSI'爬取的中文才不是乱码但是报错,如果改成 utf-8utf8 就不报错了但是乱码

Twilight6 发表于 2020-8-1 10:25:43

jjxx2005 发表于 2020-8-1 10:23
版主,我改成英文文件名问题依就

我在管道文件中保存代码如下、


在路径前面加一个 r 试试看 :

import pandas as pd
class C005Pipeline:
    def process_item(self, item, spider):
      文字 = item['文字']
      数据 = pd.DataFrame({'a': 文字})
      数据.to_csv(r'd:/abc.csv', index=False, header=0, mode='a', encoding='ANSI')
      return item

或者\\:
import pandas as pd
class C005Pipeline:
    def process_item(self, item, spider):
      文字 = item['文字']
      数据 = pd.DataFrame({'a': 文字})
      数据.to_csv('d:\\abc.csv', index=False, header=0, mode='a', encoding='ANSI')
      return item

jjxx2005 发表于 2020-8-1 10:28:22

Twilight6 发表于 2020-8-1 10:25
在路径前面加一个 r 试试看 :




版主您好
我试了一下,问题还是一样。仍然报错,似乎必需修改encoding后面的内容,可是一改就乱码了

Twilight6 发表于 2020-8-1 10:29:20

本帖最后由 Twilight6 于 2020-8-1 10:30 编辑

jjxx2005 发表于 2020-8-1 10:23
版主,我改成英文文件名问题依就

我在管道文件中保存代码如下、




你电脑安装了 Excel了吗? 如果用 Excel 打开 csv 文件的确会乱码,要改 Excel 的编码

我去看了下网站就是 utf-8 的编码的所以你用 utf-8 爬取没事,然后右击打开方式选择记事本就不会出现乱码情况

import pandas as pd
class C005Pipeline:
    def process_item(self, item, spider):
      文字 = item['文字']
      数据 = pd.DataFrame({'a': 文字})
      数据.to_csv('d:\\abc.csv', index=False, header=0, mode='a', encoding='utf-8')
      return item

用上面代码,然后用记事本打开 csv 文件,应该就不会乱码




jjxx2005 发表于 2020-8-1 10:42:54

Twilight6 发表于 2020-8-1 10:29
你电脑安装了 Excel了吗? 如果用 Excel 打开 csv 文件的确会乱码,要改 Excel 的编码

我去看 ...

真的是这样呀,谢谢,就是excel打开csv才乱码,我的机器默认了excel打开,所以才一直乱码。我用记事本打开完全正常
页: [1]
查看完整版本: 请高手帮忙解读出错原因?