Rumah > Soal Jawab > teks badan
当使用第三方库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
Cuba menjawab soalan anda, saya rasa pemahaman anda tentang pengekodan python agak tersasar.
1. Kedua-dua permintaan dan permintaan hanyalah pakej pelaksanaan protokol http.
Pengekodan mesej pemulangan paket datang daripada tapak web yang dilawati oleh protokol HTTP Format pengekodan akan ditulis dalam pengepala protokol http.
Contohnya, kod berikut:
r=requests.get('http://www.baidu.com')
print r.headers['Content-Type']
Output:
text/html;charset=UTF-8
Ini menunjukkan format UTF-8 bagi mesej respons.
Begitu juga dengan scrapy.Request.
2. Jika charset yang dikembalikan=gbk2312, anda boleh menentukan sama ada untuk menukar kodnya ke dalam pengekodan yang anda perlukan berdasarkan keperluan kod anda.
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
Hanya gunakan nyahkod dan pengekodan, tidak kira sama ada ia buruk atau tidak.