未知字符 "سقÙцØ·" 被抓取而不是编码为 utf-8

unknown characters "سقوط" are scraped instead of encoding utf-8

我正在尝试抓取一个非英语网站 (https://arzdigital.com/)。这是我的蜘蛛代码。问题是虽然一开始我导入了“urllib.parse”并且在 settings.py 文件中我写了

FEED_EXPORT_ENCODING='utf-8'

蜘蛛没有正确编码(输出是这样的:“سقÙцط۱۰هزاردلاریبیتکوین در عرض یک ساعت؛ علت Ú†Ù‡ بود؟")。即使使用 .encode() 函数也不起作用。

所以,这是我的爬虫代码:

# -*- coding: utf-8 -*-
import scrapy
import logging
import urllib.parse
parts = urllib.parse.urlsplit(u'http://fa.wikipedia.org/wiki/صفحهٔ_اصلی')
parts = parts._replace(path=urllib.parse.quote(parts.path.encode('utf8')))
encoded_url = parts.geturl().encode('ascii')
'https://fa.wikipedia.org/wiki/%D8%B5%D9%81%D8%AD%D9%87%D9%94_%D8%A7%D8%B5%D9%84%DB%8C'


class CriptolernSpider(scrapy.Spider):
    name = 'criptolern'
    allowed_domains = ['arzdigital.com']


    start_urls=[f'https://arzdigital.com/latest-posts/page/{i}/'.format(i) for i in enter code hererange(1,353)]

    def parse(self, response):
        posts=response.xpath("//a[@class='arz-last-post arz-row']")
        
        try:

            for post in posts:
                post_title=post.xpath(".//@title").get()
                yield{
                    'post_title':post_title
                }
        except AttributeError:
            logging.error("The element didn't exist")

谁能告诉我问题出在哪里?非常感谢!

在响应头中有一个字符集,否则默认为Windows-1252。 如果您找到一个字符集 ISO-8859-1 将其替换为 Windows-1252.

现在您有了正确的编码来读取它。

最好以完整的 Unicode 格式存储,UTF-8,这样每个脚本都是可能的。

您可能正在使用控制台查看输出(在 Windows 上很可能不是 UTF-8),然后您会看到多字节序列作为两个奇怪的字符。保存在一个文件中,然后用Notepad++之类的编辑,你在哪里 可以看到编码并更改它。现在甚至 Windows 记事本有时也能识别 UTF-8。