class A1Spider(scrapy.Spider):
name = "amazon"
allowed_domains = ["www.amazon.com"]
start_urls = (
'http://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=golf+balls',
)
def __init__(self):
self.page = 0
def parse(self, response):
self.page += 1
#have to view the response from scrapy to determine the xpath. it is different from what the browser sees.
#xpath
url_x = '//*[starts-with(@id,"result_")]/div/div[3]/div[1]/a/@href'
url = response.xpath(url_x).extract()
print len(url)
for i in url:
yield scrapy.Request(i, callback=self.parse_item)
#next page
NextBottom = response.xpath('//*[@id="pagnNextLink"]/@href').extract_first()
NextBottom_a = response.urljoin(NextBottom)
# print NextBottom_a
# if self.page <= 1:
# yield scrapy.Request(NextBottom_a)
最後の数行は次のページを要求するために使用されます。 start_url
(検索結果の最初のページ)のみを削るときは、24個のアイテムすべてが表示されます。 これらの行を使用して次のページに移動すると、最初のページのほとんどの項目が失われ、2番目のページからも削除されます。Amazonから一部の情報を掻き取ろうとしています。次のページリンクを実装する際に、多くのデータが欠けている
これにはどのような理由が考えられますか?私はロボットチェックに遭遇したと思っていた。ただし、最初のページでのみ動作します。
アマゾンがipから多くのリクエストを見てログインするようになると、それはおそらく起きていることでしょう。あなたのスクラップ出力は何を表していますか? –
私はあなたのスパイダーがうまくいくはずだと思います。この場合、 'don_filter = True'は必要ではありませんが、あなたの"次のページ "リクエストのコールバックについて言及していないので@ domoarrigatoの答えは有効です。 – eLRuLL
@Rafael Almeida彼らは実際にログインするように強制しません。彼らはあなたが確認コードを入力させるロボットチェックを持っています。私は、ランダムなプロキシを使用して、かなり大きなデータ量をクロールしながら問題を解決しようとしています。 – Patrick