This is Unicode string, this is Scrapy internal encoding, you can convert to an encoding you want.

On 14-11-20 上午6:43, ALI BEN ABDALLAH wrote:
Hello,
Please i need help.


i'm just beguining with scrapy crawling. i developed a simple spider that get article from a journal web site but i have a big problem with the encoding of the special characters and in every line of text i have the [u" "]. The original encoding of the thext is in UTF-8 and when i crawl text i mentioned in python script also this:

#!/usr/bin/python
# -*- coding: utf-8 -*-

But i still have the same problem.

This's an example of the output of my spider:
--------------------------------------------------------------------------
{'article_body': u'[u"Le feuilleton du scandale alimentaire au Liban se poursuit \\xe0 un rythme soutenu. Il ne se passe en effet pas un seul jour sans que de nouvelles r\\xe9v\\xe9lations concernant des violations \\xe0 la s\\xe9curit\\xe9 alimentaire ne soient faites, alimentant la pol\\xe9mique sur les responsabilit\\xe9s dans un secteur livr\\xe9 \\xe0 l\'anarchie depuis des d\\xe9cennies.", u\'Le ministre de la Sant\\xe9, Wa\\xebl Bou Faour, qui a fait \\xe9clater sa premi\\xe8re bombe \', u\'le 11 novembre\', u\', provoquant une onde de choc parmi la population, est revenu mercredi \\xe0 la charge en rendant publique une nouvelle longue liste \', u\'(voir ici)\', u\' d\\u2019\\xe9tablissements vendant certains produits non conformes aux normes. \', u\'(Voir les pr\\xe9c\\xe9dentes liste \', u\'ici\', u\' et \', u\'ici\', u\').\', u\'\\xa0\', u\'(Lire aussi:\', u\' \', u\'S\\xfbret\\xe9 alimentaire au Liban : un diagnostic inqui\\xe9tant)\', u\'\\xa0\', u\'M. Bou Faour a aussi, lors de sa conf\\xe9rence de presse, demand\\xe9 au minist\\xe8re de l\\u2019Int\\xe9rieur la fermeture de plusieurs abattoirs qui ne r\\xe9pondent pas aux normes de la s\\xe9curit\\xe9 alimentaire. Le ministre a nomm\\xe9 les abattoirs de Akbiy\\xe9, Baisriy\\xe9 et Ghaziy\\xe9, au Liban-Sud.\', u\'Le mohafez de Beyrouth a annonc\\xe9 mardi soir la \', u"fermeture officielle de l\'abattoir de Beyrouth", u", une annonce faite lors d\'une \\xe9mission t\\xe9l\\xe9vis\\xe9e sur la cha\\xeene LBCI dont l\'invit\\xe9 \\xe9tait le ministre de la Sant\\xe9.", u\'"Nous ne savons pas si l\\\'usine de broiement des os (li\\xe9e \\xe0 l\\\'abattoir de Beyrouth) a \\xe9t\\xe9 ferm\\xe9e, nous n\\\'acceptons pas des mesures cosm\\xe9tiques, mais des mesures radicales. Le probl\\xe8me de l\\u2019abattoir de Beyrouth ne r\\xe9side pas uniquement dans l\\u2019odeur et la propret\\xe9 mais aussi dans l\\u2019eau tr\\xe8s chlor\\xe9e", a soulign\\xe9 M. Bou Faour lors de sa conf\\xe9rence de presse, affirmant qu\\\'il allait soumettre au gouvernement une proposition\\xa0pour la construction d\\\'un nouvel abattoir au m\\xeame emplacement que l\\\'ancien.\', u\'\\xa0\', u\'(Lire aussi : \', u\'Scandale alimentaire : le coup de gr\\xe2ce \\xe0 un secteur en souffrance ?\', u\')\', u\'\\xa0\', u\'Le ministre de la Sant\\xe9, qui a aussi annonc\\xe9 sa d\\xe9cision de fermer une usine d\\u2019abattage de poulet \\xe0 Sa\\xefda, a r\\xe9p\\xe9t\\xe9 que sa croisade contre les aliments non conformes aux normes allait se poursuivre coute que coute.\', u"Alors que les affaires d\'empoisonnement alimentaires sont fr\\xe9quentes au Liban, l\\u2019Agence nationale d\\u2019information (Ani, officielle) a rapport\\xe9 mercredi que 10 personnes avaient \\xe9t\\xe9 hospitalis\\xe9es apr\\xe8s avoir mang\\xe9 des fajita et du taouk \\xe0 Halba, dans le Akkar.", u\'\\xa0\', u\'', 'article_title': u'Scandale alimentaire : Bou Faour continue sur sa lanc\xe9e, une nouvelle liste rendue publique',
 'auteur': u'OLJ',
 'date_publication': u'19/11/2014',
 'section': u'\xc0 La Une',
'url': u'http://www.lorientlejour.com/article/896879/scandale-alimentaire-bou-faour-continue-sur-sa-lancee-une-nouvelle-liste-rendue-publique.html'}
-------------------------------------------------------------------------------------------------

this is my code:spider:



::::::::::::::::::::::::::::::::::::::::::::::
#!/usr/bin/python
# -*- coding: utf-8 -*-

import scrapy
import unicodedata
from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy.http import Request, FormRequest
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import BaseItem
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import Compose, Join, MapCompose, TakeFirst
from w3lib.html import replace_escape_chars, remove_tags
from scrapy.contrib.spiders import CrawlSpider, Rule
from orient.items import ArticleLoader
from scrapy.contrib.loader import XPathItemLoader
from orient.removescripts import RemoveScripts

from scrapylib.processors import default_input_processor, default_output_processor
from scrapy.utils.python import unicode_to_str



def tag(values):
    v = values.rsplit('Lire aussi', 1)[0]
    return v

class WhitehorseLoader(ArticleLoader):
    default_input_processor = default_input_processor
    default_output_processor = default_output_processor
    article_title_out=Join(' ')
    #article_body_in = Compose(default_input_processor)

    article_body_out= Join(' ')
    #article_body_out=MapCompose(lambda string: string.strip())
class OrientSpider(CrawlSpider):
    name = "orient"
    allowed_domains = r["lorientlejour.com"]
    login_page = u'http://www.lorientlejour.com/account/login.php'
    start_urls = ['http://www.lorientlejour.com']
rules = (Rule(SgmlLinkExtractor(allow=('/article/')), callback='parse_url', follow=False), )



    def parse_url(self, response):

        xpath = HtmlXPathSelector(response)
        item_loader = WhitehorseLoader(response=response)
item_loader.add_xpath('auteur', str(('//div[@class="attributes"]/text()'))) item_loader.add_xpath('date_publication', str(('//div[@class="date"]/text()')))
        item_loader.add_value('url', str((response.url).decode("utf-8")))
item_loader.add_xpath('section', str('//div[@class="mainbar articlePage"]/h2/a/text()')) item_loader.add_xpath('article_title', str(('//div[@class="mainbar articlePage"]/article/h1/text()')).encode("utf-8"))
item_loader.add_xpath('article_body',tag(str(('//div[@class="text"]/p//text()'))))
        item_loader.add_value('article_body', tag(str(value)))

        return str((item_loader.load_item()))



:::::::::::::::item


# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
import scrapy
from scrapy import Item, Field
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import TakeFirst


class ArticleItem(scrapy.Item):
    # define the fields for your item here like:

    url = Field()
    auteur = Field()
    date_publication = Field()
    section = Field()
    article_title = Field()
    article_body = Field()


class ArticleLoader(ItemLoader):
    default_item_class = ArticleItem
    default_output_processor = TakeFirst()
--
You received this message because you are subscribed to the Google Groups "scrapy-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
Visit this group at http://groups.google.com/group/scrapy-users.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups 
"scrapy-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/scrapy-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to