Maison > Questions et réponses > le corps du texte
当使用第三方库requests
的时候,可以这样转换:
import requests
html = requests.get('http://example.com')
html.encoding = 'utf-8'
问题:
使用Scrapy中的Request的时候,怎么把拿到的内容编码转换为utf-8?
demo:
import scrapy
class StackOverflowSpider(scrapy.Spider):
name = 'stackoverflow'
start_urls = ['http://stackoverflow.com/questions?sort=votes']
def parse(self, response):
for href in response.css('.question-summary h3 a::attr(href)'):
full_url = response.urljoin(href.extract())
yield scrapy.Request(full_url, callback=self.parse_question)
def parse_question(self, response):
yield {
'title': response.css('h1 a::text').extract_first(),
'votes': response.css('.question .vote-count-post::text').extract_first(),
'body': response.css('.question .post-text').extract_first(),
'tags': response.css('.question .post-tag::text').extract(),
'link': response.url,
}
大家讲道理2017-04-18 09:08:14
En essayant de répondre à votre question, j'ai l'impression que votre compréhension du codage Python est un peu mauvaise.
1. Les requêtes et les requêtes ne sont que des packages d'implémentation du protocole http.
L'encodage du message de retour du paquet provient du site Web visité par le protocole HTTP. Le format d'encodage sera écrit dans l'en-tête du protocole http.
Par exemple, le code suivant :
r=requests.get('http://www.baidu.com')
print r.headers['Content-Type']
Sortie :
text/html;charset=UTF-8
Ceci indique le format UTF-8 du message de réponse.
Il en va de même pour Scrapy.Request.
2. Si le charset renvoyé = gbk2312, vous pouvez déterminer s'il faut le transcoder dans l'encodage dont vous avez besoin en fonction de vos besoins en code.
r=requests.get('http://www.baidu.com')
print r.content[:1000].decode('utf-8')
print r.content[: 1000].decode('utf-8').encode('gbk')
PHP中文网2017-04-18 09:08:14
Utilisez simplement le décodage et l’encodage, que ce soit scrapy ou non.