2013-07-25 2 views
2

ссылки кодированияScrapy питон: Юникод ссылка ошибка

когда выскабливание сайта SCRAPY извлекает ссылки, содержащие & драм и бросает excption: Не инстанцирует Ссылку объекты с Юникодом URL. Предполагая, что кодировка utf-8 (что может быть неправильно), так как я могу исправить эту ошибку?

+0

Любой пример поможет много! –

ответ

0

У меня была такая же проблема с этим символом вставлен на некоторые ссылки. Я нашел this related commit на GitHub и чем используемый this advice записать файл link_extractors.py с:

from scrapy.selector import HtmlXPathSelector 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.utils.response import get_base_url 


class CustomLinkExtractor(SgmlLinkExtractor): 
"""Need this to fix the encoding error.""" 

    def extract_links(self, response): 
     base_url = None 
     if self.restrict_xpaths: 
      hxs = HtmlXPathSelector(response) 
      base_url = get_base_url(response) 
      body = u''.join(f for x in self.restrict_xpaths 
          for f in hxs.select(x).extract()) 
      try: 
       body = body.encode(response.encoding) 
      except UnicodeEncodeError: 
       body = body.encode('utf-8') 
     else: 
      body = response.body 

     links = self._extract_links(body, response.url, response.encoding, base_url) 
     links = self._process_links(links) 
     return links 

Потом я использовал его в моем spiders.py:

rules = (
    Rule(CustomLinkExtractor(allow=('/gp/offer-listing*',), 
          restrict_xpaths=("//li[contains(@class,'a-last')]/a",)), 
     callback='parse_start_url', follow=True, 

     ), 
) 
Смежные вопросы