未知字符 "سقÙцØ·" 被抓取而不是编码为 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。
我正在尝试抓取一个非英语网站 (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。