2013-07-25 5 views
2

링크 인코딩Scrapy 파이썬 : 유니 코드 링크 오류

사이트 scrapy가 & AMD가 포함 된 링크를 추출하고 excption을 던졌습니다 근근이 살아가고 : 이 링크를 인스턴스화하지 마십시오 유니 코드 URL을 개체. utf-8 인코딩 (잘못 될 수 있음)을 가정하면이 오류를 어떻게 해결할 수 있습니까?

+0

모든 예는 많은 도움이 될 것이다! –

답변

0

나는이 문자로 같은 문제가 발생했습니다 일부 링크에 삽입했습니다. 나는 GitHub의에 this related commit을 발견하고있는 파일 link_extractors.py을 작성하는 this advice을 사용하는 것보다 :

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, 

     ), 
)