gpt4 book ai didi

python - scrapy选择器字符串不接受国际字符

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:29 25 4
gpt4 key购买 nike

我正在尝试让 Scrapy 蜘蛛抓取网站,但我想要的项目所需的元素之一是用西类牙语编写的,使用带有波浪号 (í) 的元音。

titulo=title.select(u'.//["Título Original:"]/text()'.extract()

我在这里发现了类似的问题,但他们接受的答案对我不起作用。

在字符串开头添加 u 解决了一些问题,但给了我错误

UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 21: ordinal not in range(128)

我在这里发现其他问题建议使用 '.../text()'.decode('utf-8) 但这样做或使用 .encode('utf-8') 会给我错误

    exceptions.ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

是否有我遗漏的东西或其他方式,或者我最好制作一个正则表达式来捕获字符串中除该字母之外的所有其他部分?

这是我到目前为止的代码:

 def parse(self, response):
#change the response to an HtmlResponse to allow for utf-8 encoding of the body.
response = HtmlResponse(url=response.url, status=response.status, headers=response.headers, body=response.body)

print '\n\nresponse encoding', response.encoding ##the page is encoded in utf-8

hxs = HtmlXPathSelector(response)
titles = hxs.select('//div[@class="datosespectaculo"]')

items = []
for title in titles:
item = CarteleraItem()
titulo=title.select(u'.//["Título Original:"]/text()'.encode('utf-8')).extract()
Ano=title.select('.//span[@itemprop="copyrightYear"]/text').extract()
item ["title"] = titulo
item ["Ano"] = Ano
items.append(item)

这是网页来源供引用

<div id="contgeneral">
<div class="contyrasca">
<div id="contfix">
<div class="contespectaculo">

<div class="colizq"><div itemscope itemtype="http://schema.org/Movie">
<h1 class="titulo" itemprop="name">15.361</h1>

<img class="afiche" src="http://www.cartelera.com.uy/imagenes_espectaculos/musicdetail13/14770.jpg"/>
<div class="datosespectaculo">

<strong>Título Original:</strong> <em>15.361</em><br />

<strong>Año: </strong><span itemprop="copyrightYear">2014</span><br />
<strong>Género: </strong><span itemprop="genre">Comedia/Drama</span><br />
<strong>Duración: </strong><span itemprop="duration">60&#39;</span><br />
<strong>Calificación: </strong>+18 años<br />

最佳答案

如果 # -*-coding: utf-8 -*- 不起作用,您可以使用 unicode 字符串,其中非 ASCII 字符使用 \u转义序列。

所以你的 XPath 选择器变成:

titulo=title.select(u'.//["T\u00edtulo Original:"]/text()'.encode('utf-8')).extract()

我通常使用简单的 Python shell session 来检查转义序列:

paul@wheezy:~$ python
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u'.//["Título Original:"]/text()'
u'.//["T\xedtulo Original:"]/text()'
>>> u'.//["T\u00edtulo Original:"]/text()'
u'.//["T\xedtulo Original:"]/text()'
>>>

关于python - scrapy选择器字符串不接受国际字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21845609/

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