我想从亚马逊的this page中抓取,但scrapy总是将我指向another page,其图像比第一页小。因此,我想停止重定向并抓取第一页。如何抓取scrapy中给定的url而不是重定向的urls?
经过一番搜索,我找到了this answer。但是,当我改变了我这样的代码:
yield Request(item['link'],meta = {
'dont_redirect': True,
'handle_httpstatus_list': [301,302]
}, callback=self.parse)
艰难停止重定向,但它并没有任何分析的第一页!我的日志是这样的:
2015-10-20 14:56:40 [scrapy] INFO: Scrapy 1.0.3 started (bot: amazon)
2015-10-20 14:56:40 [scrapy] INFO: Optional features available: ssl, http11
2015-10-20 14:56:40 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'amazon.spiders', 'SPIDER_MODULES': ['amazon.spiders'], 'BOT_NAME': 'amazon'}
2015-10-20 14:56:40 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState
2015-10-20 14:56:40 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, HttpProxyMiddleware, ChunkedTransferMiddleware, DownloaderStats
2015-10-20 14:56:40 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2015-10-20 14:56:40 [scrapy] INFO: Enabled item pipelines: AmazonPipeline
2015-10-20 14:56:40 [scrapy] INFO: Spider opened
2015-10-20 14:56:40 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2015-10-20 14:56:40 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
2015-10-20 14:56:41 [scrapy] DEBUG: Crawled (301) <GET http://www.amazon.com/s/ref=sr_il_ti_computers?rh=n%3A172282%2Cn%3A!493964%2Cn%3A541966%2Cn%3A565108%2Cp_n_size_browse-bin%3A7817231011&ie=UTF8&qid=1445324149&lo=computers> (referer: None)
2015-10-20 14:56:41 [scrapy] INFO: Closing spider (finished)
2015-10-20 14:56:41 [scrapy] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 361,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 423,
'downloader/response_count': 1,
'downloader/response_status_count/301': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2015, 10, 20, 6, 56, 41, 743646),
'log_count/DEBUG': 2,
'log_count/INFO': 7,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2015, 10, 20, 6, 56, 40, 868227)}
任何人有任何想法吗?谢谢!
如果服务器决定发送一个重定向头而不返回一个实体,那么当然避免重定向会让你看不到任何东西。如果您发现亚马逊总是重定向您的刮板,那么您应该尝试弄清楚是什么让他们做到了这一点。 – poke
@poke谢谢,我真的不知道服务器为什么这样做,第一页可以在浏览器中查看,而不会有任何问题。 – Demonedge
服务器通常会查看请求中发送的HTTP标头。您可以尝试发送与浏览器发送的内容完全相同的内容;然后一次删除一个头,直到找出哪个头让服务器以这种方式做出反应。 – poke