Hello,
Thanks for response, i convert it to utf-8 but i have the same problem.
item_loader.add_xpath('article_title', str(('//div[@class="mainbar
articlePage"]/article/h1/text()')).encode("utf-8"))
when i do response .encoding i have utf-8 so that the original
encoding of data is also utf-8.
do have idea, haw i can convert it correctly ?
thanks
Le mercredi 19 novembre 2014 17:43:14 UTC-5, ALI BEN ABDALLAH a écrit :
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
<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
<http://lorientlejour.com>"]
login_page = u'http://www.lorientlejour.com/account/login.php
<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
<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.