gpt4 book ai didi

抓取文本编码

转载 作者:行者123 更新时间:2023-12-03 08:59:30 24 4
gpt4 key购买 nike

这是我的蜘蛛

from scrapy.contrib.spiders import CrawlSpider,Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from vrisko.items import VriskoItem

class vriskoSpider(CrawlSpider):
name = 'vrisko'
allowed_domains = ['vrisko.gr']
start_urls = ['http://www.vrisko.gr/search/%CE%B3%CE%B9%CE%B1%CF%84%CF%81%CE%BF%CF%82/%CE%BA%CE%BF%CF%81%CE%B4%CE%B5%CE%BB%CE%B9%CE%BF']
rules = (Rule(SgmlLinkExtractor(allow=('\?page=\d')),'parse_start_url',follow=True),)

def parse_start_url(self, response):
hxs = HtmlXPathSelector(response)
vriskoit = VriskoItem()
vriskoit['eponimia'] = hxs.select("//a[@itemprop='name']/text()").extract()
vriskoit['address'] = hxs.select("//div[@class='results_address_class']/text()").extract()
return vriskoit

我的问题是返回的字符串是 unicode,我想将它们编码为 utf-8。我不知道这是最好的方法。我尝试了几种方法都没有结果。

先感谢您!

最佳答案

Scrapy 以 unicode 格式返回字符串,而不是 ascii。要将所有字符串编码为 utf-8,您可以编写:

vriskoit['eponimia'] = [s.encode('utf-8') for s in hxs.select('//a[@itemprop="name"]/text()').extract()]

但我认为你期待另一个结果。您的代码返回 包含所有搜索结果的项目。要为每个结果返回项目:

hxs = HtmlXPathSelector(response)
for eponimia, address in zip(hxs.select("//a[@itemprop='name']/text()").extract(),
hxs.select("//div[@class='results_address_class']/text()").extract()):
vriskoit = VriskoItem()
vriskoit['eponimia'] = eponimia.encode('utf-8')
vriskoit['address'] = address.encode('utf-8')
yield vriskoit

更新

JSON 导出器默认写入转义的 unicode 符号(例如 \u03a4 ),因为并非所有流都可以处理 unicode。它可以选择将它们写为 unicode ensure_ascii=False (参见 json.dumps 的文档)。但是我找不到将这个选项传递给标准饲料导出商的方法。

因此,如果您希望导出的项目写入 utf-8编码,例如为了在文本编辑器中阅读它们,您可以编写自定义项目管道。

管道.py:

import json
import codecs

class JsonWithEncodingPipeline(object):

def __init__(self):
self.file = codecs.open('scraped_data_utf8.json', 'w', encoding='utf-8')

def process_item(self, item, spider):
line = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.file.write(line)
return item

def spider_closed(self, spider):
self.file.close()

不要忘记将此管道添加到 settings.py:

 ITEM_PIPELINES = ['vrisko.pipelines.JsonWithEncodingPipeline']

您可以自定义管道以更易读的格式写入数据,例如您可以生成一些格式化的报告。 JsonWithEncodingPipeline只是基本的例子。

关于抓取文本编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9181214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com