2014-12-12 8 views
1

를 사용하여 내 scrapy 거미에 다음 코드를했다 :처리 JSON 응답 scrapy

def parse(self, response): 
     jsonresponse = json.loads(response.body_as_unicode()) 
     htmldata = jsonresponse["html"] 
     for sel in htmldata.xpath('//li/li'): 
       -- more xpath codes -- 
     yield item 

하지만 난이 오류 데 : json으로 응답을 확인한 후

raise ValueError("No JSON object could be decoded") 
exceptions.ValueError: No JSON object could be decoded 

을, 나는 약 **<!--WPJM-->**을 발견 이 오류의 원인이되는 **<!--WPJM_END-->** !

<!--WPJM-->{"found_jobs":true,"html":"<html code>","max_num_pages":3}<!--WPJM_END--> 

은 어떻게 보지 않고 내 scrapy을 구문 분석 할 - WPJM--와 -! WPJM_END-- 코드를?

편집 :

파일 "/home/muhammad/Projects/project/project/spiders/crawler.py", 라인 (150), 구문 분석 에 htmldata에서 SEL을 위해 :이 내가 가지고있는 오류입니다. 수동으로 replace()를 사용하여 '유니 코드'개체가 어떤 속성 'XPath는'가장 쉬운 방법은 주석 태그를 제거하는 것입니다

def parse(self, response): 
     rawdata = response.body_as_unicode() 
     jsondata = rawdata.replace('<!--WPJM-->', '').replace('<!--WPJM_END-->', '') 
#  print jsondata # For debugging 
#  pass 
     data = json.loads(jsondata) 
     htmldata = data["html"] 
#  print htmldata # For debugging 
#  pass 
     for sel in htmldata.xpath('//li'): 
      item = ProjectjomkerjaItem() 
      item['title'] = sel.xpath('a/div[@class="position"]/div[@id="job-title-job-listing"]/strong/text()').extract() 
      item['company'] = sel.xpath('a/div[@class="position"]/div[@class="company"]/strong/text()').extract() 
      item['link'] = sel.xpath('a/@href').extract() 
+0

의 Content-Type :

또는 더 나은 옵션을 것이 XPath에 의해 text() 얻을 수하는 응용 프로그램/난 당신이 한 두 번째 어떤 옵션을 알고 희망 – muhammadn

답변

0

이 없습니다 : : XPath는 ('// 리') : exceptions.AttributeError

data = response.body_as_unicode() 
data = data.replace('<!--WPJM-->', '').replace('<!--WPJM_END-->', '') 
jsonresponse = json.loads(data) 

꽤 파이썬 적이거나 신뢰할 수는 없지만.

$ scrapy shell index.html 
>>> response.xpath('//text()').extract()[0] 
u'{"found_jobs":true,"html":"<html code"}' 
+0

x-www-form-urlencoded로, 나에게 명확하지 않았다. (첫 번째 것은) 클래스 = ""rss_link "> RSS <\/a>", "max_num_pages": 3} muhammadn

+0

두 번째 옵션은 다음과 같다. HTML 코드에서 텍스트를 추출하기 위해 'text()'xpath 함수를 사용하는 것, 즉 주석을 무시하는 것. – alecxe

+0

나는 json 디코딩 오류가 여전히있다. 왜 지금은 모르겠다./ (하지만 json 파일을 저장하면 WPJM 주석을 제거하고 루비에서 html로 json 디코더를 실행하고 file : //processedjsonfile.html 파일로 작업을 실행하는 중) – muhammadn