使用csv存储爬虫数据乱码问题解决

  # 将获取到的章节信息(章节名,章节链接)全部保存到csv文件中。
    with open('Chapters.csv', 'w+') as csvFile:
        writer = csv.writer(csvFile)
        for chapter in chapters:
            writer.writerow((chapter.get_attribute('innerHTML').strip().encode('gbk', 'ignore').decode('gbk'), chapter.get_attribute('href')))

如上是解决错误后的程序。

在刚开始写这部分函数的时候,我犯了几个很关键的错误,最让我头疼的还是编码问题,不过最后还是凭借我自己的思考把问题解决了。下面是我对这几个错误的解读和解决方案。

隐藏标签中的文本

如上程序,chapter是一个使用css隐藏的标签,刚开始我使用了最常规的方法来获取它的文本内容,也就是

chapter.text

但是我发现,解析出来的信息却是一个空字符串,最先我怀疑是爬取的页面源码出现了问题,但是我使用

driver.page_source

来获取源码进行查看时,发现标签中的信息没有任何错误。同时我发现了该标签为隐藏标签,于是我将这个尝试了使用

chapter.get_attribute('innerHTML').strip()

来获取隐藏标签中的文字(后面的strip函数时为了让获得的信息更加规范,去掉字符串两边的空格),此时我就获得了正确的标签文本。

储存到csv中显示无法储存

在最开始,我将爬取的文本信息存到csv中使用的代码为

 writer.writerow((chapter.get_attribute('innerHTML').strip(), chapter.get_attribute('href')))

这是,解释器报错,无法将文本存入csv文件中,当然,是让人十分头疼的编码错误。
中文版windows的txt默认使用的是gbk编码。我将这个作为突破口,对编码进行了一些思考。

  • 首先,我爬取的内容是存在于中文网站的,网站使用的编码经过查证是utf-8编码。
  • 然后,我知道utf-8字符集大于gbk字符集,这样,utf-8中的一些字符可能就不能通过gbk编码方式进行编码,此时,txt就会无法储存文本。
  • 那么,如何过滤掉那些非gbk字符呢,第一步,先通过gbk编码方式进行编码,忽略掉出错的编码,然后再用gbk进行解码,这样写入到csv文件中就没有问题了。

    我对编码还有字符集的了解十分肤浅,文中若有错误请原谅,若对编码想要有更深的了解,可以参考维基百科和给出的知乎链接中梁海的评论。

https://www.zhihu.com/question/20650946

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章