Scrapy - すべてのページが削られたがscrapyはラップアラウンドし、ページの擦り傷最初のx量

chrisHG:
class HomedepotcrawlSpider(CrawlSpider):

    name = 'homeDepotCrawl'
    #allowed_domains = ['homedepot.com']
    start_urls =['https://www.homedepot.com/b/Appliances/ZLINE-Kitchen-and-Bath/N-5yc1vZbv1wZhsy?experienceName=default&Nao=0']

    def parse(self, response):

        for item in self.parseHomeDepot(response):
            yield item

        next_page_url = response.xpath('//link[@rel="next"]/@href').extract_first()
        if next_page_url:
            yield response.follow(url=next_page_url, callback=self.parse)



    def parseHomeDepot(self, response):

        items = response.css('.plp-pod')
        for product in items:
            item = HomedepotSpiderItem()

    #get SKU
            productSKU = product.css('.pod-plp__model::text').getall()

    #get rid of all the stuff i dont need
            productSKU = [x.strip(' ') for x in productSKU] #whiteSpace
            productSKU = [x.strip('\n') for x in productSKU]
            productSKU = [x.strip('\t') for x in productSKU]
            productSKU = [x.strip(' Model# ') for x in productSKU] #gets rid of the model name
            productSKU = [x.strip('\xa0') for x in productSKU] #gets rid of the model name



            item['productSKU'] = productSKU

            yield item

問題の説明

ここで私はこすりデータに取り組んできたことをプログラムの一部です。私はこのポストに含める必要があったとは思いませんでしたので、私は他のフィールドを掻き取るための私のコードを残しました。私はExcelにこのプログラムおよびエクスポートデータを実行すると、私は最初の240の項目(10ページ)を取得します。それは、(最初​​の行はラベルによって占有されている)私のスプレッドシートの241行に上がります。次いで、行242から出発し、最初の241行が再び繰り返されます。再び行482および722に。

スクレーパーは、第240アイテムを3回出力します

EDIT だから私はこするの間のログを探していた、それはすべてのページを掻き取っなっていたことが判明しました。最後のページには、次のとおりです。

https://www.homedepot.com/b/Appliances/ZLINE-Kitchen-and-Bath/N-5yc1vZbv1wZhsy?experienceName=default&Nao=696&Ns=None >

そして、その後のログファイルがあり、再び掻き取ったばかりの最初のページを、表示されます。

https://www.homedepot.com/b/Appliances/ZLINE-Kitchen-and-Bath/N-5yc1vZbv1wZhsy?experienceName=default

以下のために私が仮定します.. ここでは、画像の説明を入力します。

私はExcelにエクスポートするために使用していることを、端末のコマンドは次のとおりです。

scrapy crawl homeDepotCrawl -t csv -o - > "(File Location)"

編集:私は、このコマンドを使用していた理由は、これはターゲットファイルが消去されますので、エクスポートするときは、Scrapyは、ファイルに掻き取ったデータを付加しているためであるとちょうどそれを再度作成します。

私はすべてのページを取得導出するために使用するコードは次のようになります。

<a class="hd-pagination__link" title="Next" href="/b/Appliances/ZLINE-Kitchen-and-Bath/N-5yc1vZbv1wZhsy?experienceName=default&amp;Nao=24&amp;Ns=None" data-pagenumber="2"></a>

もともと私は変わっsettings.py私のように、それは、この予期しない動作を引き起こしていたウェブサイトだと思ったROBOTSTXT_OBEY = 0し、私は遅延を追加しましたが、それは何も変更しませんでした。

だから私はとの助けをしたいと思いますどのような:

CSV出力は最初の240の項目(10ページ)を取り、3回繰り返さ理由を-Figuring

クモは、最初の30を掻き取った後の最初のページに戻っていないことを確認 - どのように

David542:

私はこのような何かを示唆しています。主な違いは、私がページに保存されたJSONからの情報をつかんだと私は認識して自分自身をページ付けてるNaoオフセット製品です。コードはあまりにもはるかに短いです。

import requests,json,re
product_skus = set()
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'}
base_url = 'https://www.homedepot.com/b/Appliances/ZLINE-Kitchen-and-Bath/N-5yc1vZbv1wZhsy?experienceName=default&Nao=%s'
for page_num in range(1,1000):
    url = base_url % (page_num*24)
    res = requests.get(url, headers=headers)
    json_data = json.loads(re.search(r'digitalData\.content=(.+);', res.text).group(1))
    prev_len = len(product_skus)
    for product in json_data['product']:
        product_skus.add(product['productInfo']['sku'])
    if len(product_skus) == prev_len: break # this line is optional and can determine when you want to break

ホーム・デポのページは次のようにまた、それは見え繰り返し使用すると、240の制限を見ている理由である(少なくとも、あなたが送信したもので)すべての10ページ。ここではそれを自分自身を閲覧からの例です:

ここでは、画像の説明を入力します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=17160&siteId=1