Scrapy无法加载页面

时间:2019-06-19 18:29:43

标签: web-scraping scrapy

我使用scrapy,start_url具有以下结构:

https://www.yoox.com/us/men/shoponline/accessories_mc#/dept=men&gender=U&page=1&season=X

Scrapy无法加载页面:

scrapy shell https://www.yoox.com/us/men/shoponline/accessories_mc#/dept=men&gender=U&page=1&season=X

可能是因为该链接缺少符号?。什么不正确?

2 个答案:

答案 0 :(得分:1)

正如@vezunchik所说,JavaScript会从另一个链接动态加载您的数据。但是您可以直接在代码中使用该链接:https://www.yoox.com/US/shoponline?dept=men&gender=U&page=1&season=X&clientabt=SmsMultiChannel_ON%2CSizeIsocode_ON%2CNewDelivery_ON

我使用Chrome开发者工具和“网络”标签在上面找到了链接。

答案 1 :(得分:0)

我认为您可能不需要其他海报建议的飞溅。我将使用开发人员工具进行调查,以查看您是否可以直接访问API。

如果您确实需要Splash,请检查您的设置,并确保您已复制了中间件并设置了SPLASH_URL设置。

SPLASH_URL = 'http://194.182.69.110:8050'

DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

您可能应该接受 gangabass 的答案,因为他无需任何JavaScript处理即可解决您的问题。除非绝对必要,否则不要使用JS。

诸如飞溅或硒之类的东西应始终是针对特定网站的最后一道防线。例如,在ASP网站上,仅使用Selenium可能比尝试对请求进行反向工程更为有益。也就是说,如果他们不需要大量数据。 Selenium和Splash不能很好地进行刮除,因此仅在绝对需要时才应使用它们。如果您分析请求,则几乎每个网站都可以被删除而无需处理JavaScript。大多数网站都使用自己的API(未记录)以服务其网站的前端。

回答有关使用Scrapy Shell加载页面的更新问题。您的网址格式不正确或格式错误。 这是您的URL端点。您可以通过问号开始向其发送参数。 https://www.yoox.com/us/men/shoponline/accessories_mc#/

这是您要发送到URL的参数。它以?开头。表示参数的开头,并用&符号或&表示下一个参数。 ?dept = men&gender = U&page = 1&season = X

应该有一个?就在债务之前。 ?dept = men&gender = U

同样,您可能不需要为此使用Splash。我会留下评论,但还没有足够的REP。我已附加答案以反映正在进行的对话。