2017-09-22 4 views
0

私はこのウェブサイトを掻いています:https://www.olx.com.ar/celulares-telefonos-cat-831とScrapy 1.4.0。私がスパイダーを動かすと、すべてがうまくいって「次のページ」の部分に行きます。ここでは、コードです:次のページのURLに従うのはなぜですか?

# -*- coding: utf-8 -*- 
import scrapy 
#import time 

class OlxarSpider(scrapy.Spider): 
name = "olxar" 
allowed_domains = ["olx.com.ar"] 
start_urls = ['https://www.olx.com.ar/celulares-telefonos-cat-831'] 

def parse(self, response): 
    #time.sleep(10) 
    response = response.replace(body=response.body.replace('<br>', '')) 
    SET_SELECTOR = '.item' 
    for item in response.css(SET_SELECTOR): 
     PRODUCTO_SELECTOR = '.items-info h3 ::text' 
     yield { 
      'producto': item.css(PRODUCTO_SELECTOR).extract_first().replace(',',' '), 
      } 

    NEXT_PAGE_SELECTOR = '.items-paginations-buttons a::attr(href)' 
    next_page = response.css(NEXT_PAGE_SELECTOR).extract_first().replace('//','https://') 
    if next_page: 
     yield scrapy.Request(response.urljoin(next_page), 
      callback=self.parse 
      ) 

私は何人かの人々がRequestdont_filter = True属性を追加した他の質問で見てきたが、それは私のために動作しません。最初の2ページにスパイダーループを作成するだけです。 https:が付いていないオリジナルのhrefを修正するためにreplace('//','https://')部分を追加しました。これにはScrapyを続けることはできません。 また、スパイダーを実行すると、最初のページがスクラップされてから返されます。[scrapy.dupefilters] DEBUG: Filtered duplicate request: <GET https://www.olx.com.ar/celulares-telefonos-cat-831-p-2> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates) 明らかにそうでない場合、2番目のページを複製するようにフィルタリングするのはなぜですか?

コメントにTarun Lalwaniソリューションを適用しました。私はその細部をあまり見逃してしまった!補正がうまくいき、ありがとう!

+0

その奇妙なコード。 response.urljoinを使用する場合は、なぜ.replace( '//'、 'https://')が必要ですか?スパイダーのすべてのコードを入力してください。 – Verz1Lka

+0

私はすでにhttpsの部分を使わずに試してみたところ、同じ結果が得られて問題はありません。私はウェブページや自分のコードについて何か不足しています。 –

答えて

0

問題はCSSセレクターです。 1ページ目は、次のページリンクと一致します。 2ページ目は、前のページと次のページのリンクと一致します。そのあなたのピックのうち最初のものだけ

ソリューションは簡単ですので、あなただけの第一及び第二のページの間で回転、extract_first()を使用して、あなたはCSSセレクタを変更する必要が

NEXT_PAGE_SELECTOR = '.items-paginations-buttons a::attr(href)' 

NEXT_PAGE_SELECTOR = '.items-paginations-buttons a.next::attr(href)' 

これは次のページのURLのみを識別します

関連する問題