2016-11-22 9 views
-6

私のコードを見つけてください:はIndexError:範囲外のリストインデックス(パイソン)

# #は、新しいポストを解析します。 #

def parse_new_post(self,response,review,created_at,data): 
    data.update({ 
     'cool_count':self.set_int(review.css('a[rel=cool]').css('span[class=count]::text').extract()), 
     'created_at':self.set_date(review.css('meta[itemprop=datePublished]::attr(content)').extract()[0]), 
     'elite':len(review.css('.is-elite')) == 1, 
     'funny_count':self.set_int(review.css('a[rel=funny]').css('span[class=count]::text').extract()), 
     'owner_comment_text':self.set_text(review.css('span[class=js-content-toggleable\ hidden]::text').extract()).replace("\n"," "), 
     #'rating':review.css('div[itemprop=reviewRating]').css('div').css('i::attr(title)').re('(\\d\.\\d)'), 
     'rating':review.css('div[itemprop=reviewRating]').css('meta').css('::attr(content)').re('(\\d\.\\d)')[0].encode('utf-8'), 
     #'review_id':review.css('div::attr(data-review-id)').extract()[0].encode('utf-8'), 
     #'review_id':review.xpath('.//div[contains(@class,"review review--with-sidebar")]/@data-review-id').extract(), 
    'review_text':self.set_text(review.css('p[itemprop=description]::text').extract()).replace("\n"," "), 
     'total_friends':self.set_int(review.css('li[class=friend-count]').css('b::text').extract()), 
     #'total_friends':int(review.xpath('.//li[contains(@class,"friend-count")]/span/b/text()').extract()[0].strip()), 
     #'total_reviews':int(review.xpath('.//li[contains(@class,"review-count")]/span/b/text()').extract()[0].strip()), 
     #'total_friends':int(review.xpath('.//li[contains(@class,"friend-count")]/b/text()').extract()[0].strip()), 
     #'total_reviews':int(review.xpath('.//li[contains(@class,"review-count")]/b/text()').extract()[0].strip()), 
     'total_reviews':self.set_int(review.css('li[class=review-count]').css('b::text').extract()), 
     'user_id':review.css('div[class*=photo-box]').css('a::attr(href)').extract(), 
     'useful_count':self.set_int(review.css('a[rel=useful]').css('span[class=count]::text').extract()), 
     #'user_location':review.css('li[class=user-location]').css('b::text').extract()[0].encode('utf-8'), 
     'user_location':review.xpath('.//li[@class="user-location responsive-hidden-small"]/b/text()').extract(), 
     'username':review.css('meta[itemprop=author]::attr(content)').extract()[0].encode('utf-8'), 
     'review_id':review.xpath('.//div[contains(@class,"review review--with-sidebar")]/@data-review-id').extract()[0].encode('utf-8'), 
    }) 

私は下のエラーを取得していますウェブサイトをクロールしています:

2016-11-22 01:27:52 [scrapy] ERROR: Spider error processing <GET https://www.yelp.com/biz/lexus-of-glendale-glendale?utm_campaign=yelp_api&utm_medium=api_v2_phone_search&utm_source=HPtU-ro8MXX3MOY_DQkP6A?sort_by=date_desc> (referer: None) 
Traceback (most recent call last): 
    File "/usr/lib64/python2.7/site-packages/scrapy/utils/defer.py", line 102, in iter_errback 
    yield next(it) 
    File "/usr/lib64/python2.7/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in process_spider_output 
    for x in result: 
    File "/usr/lib64/python2.7/site-packages/scrapy/spidermiddlewares/referer.py", line 22, in <genexpr> 
    return (_set_referer(r) for r in result or()) 
    File "/usr/lib64/python2.7/site-packages/scrapy/spidermiddlewares/urllength.py", line 37, in <genexpr> 
    return (r for r in result or() if _filter(r)) 
    File "/usr/lib64/python2.7/site-packages/scrapy/spidermiddlewares/depth.py", line 54, in <genexpr> 
    return (r for r in result or() if _filter(r)) 
    File "/c360/apps/c360nextgen/src/crawlers/yelp_new/yelp_new/spiders/lexus_posts.py", line 85, in parse 
    yield self.check_for_new_post(response,review,created_at,data) 
    File "/c360/apps/c360nextgen/src/crawlers/yelp_new/yelp_new/spiders/lexus_posts.py", line 95, in check_for_new_post 
    return self.parse_new_post(response,review,created_at,data) 
    File "/c360/apps/c360nextgen/src/crawlers/yelp_new/yelp_new/spiders/lexus_posts.py", line 123, in parse_new_post 
    'review_id':review.xpath('.//div[contains(@class,"review review--with-sidebar")]/@data-review-id').extract()[0].encode('utf-8'), 
IndexError: list index out of range 
+1

こんにちは!ようこそ!クラッシュが発生した場所でアプリケーションのコードを提供する必要があると思います。その場合、コミュニティはあなたを助けようとします – wolendranh

+0

'review.xpath( '.// div(@class、" review review with with sidebar ") ]/@ data-review-id ')。extract() 'は空のリストです – Chr

+0

これをコードとしてフォーマットしてください。 – cco

答えて

0

あなたのクエリは空のリストを返します。したがって、最初の要素[0]を見つけることができず、IndexErrorをスローします。ウェブサイトのクロールに使用するコードを修正します。

+0

私はどこで修正するべきですか? –

+0

私は 'review.xpath( '.// div [@(" review review with with sidebar ")]/@ data-review-id'を含んでいます)。自分でxpathを確認する必要があります。 – Sven

+0

私は(.//div[contains(@class,"view-with-sidebarでレビューする)]/@ data-review-i)を使っている間、私はリストにデータを取得しています。 –

0

indexerror:リストが範囲外である場合は、存在しないリスト内のインデックス/アイテムを呼び出そうとしていることを意味します。ここ

は一例である:それはになり、そのため5項目がリストに存在イマイチこと

list = [1, 2] 
print(list[4]) 

注意: はIndexError:範囲外のリストインデックス(パイソン)

で[0]の最初の要素(0は最初の項目ですがリストに項目がありません)を検索しようとする空のリストを返します

+0

Uは値として4を、インデックスとして4を取り出していますか? –

+0

4を索引として使用します。 リスト[4]は番号4ではなくリスト内の項目を意味します。 助けてくれれば助言してください:) –

+0

ありがとう@Seastian ..私のコードで私は何を変えるべきですか? –

0

レビュー一覧にチェックを入れてください:

review_list = review.xpath('.//div[contains(@class,"review review--with-sidebar")]/@data-review-id').extract() 
if review_list: 
    'review_id' : review_list[0].encode('utf-8') 
else: 
    'review_id' : "" 
関連する問題