Scrapy抓取有时可见而非其他人的内容

时间:2018-04-20 02:10:30

标签: python web-scraping scrapy scrapy-splash

我正在从zappos.com上删除一些信息,特别是详细信息页面的一部分,它显示了查看当前项目的客户也查看过的内容。

这是一个这样的项目列表: https://www.zappos.com/p/chaco-marshall-tartan-rust/product/8982802/color/725500

问题是,我发现我正在抓取的部分会立即出现在某些项目上,但在其他部分,它只会在我刷新页面2到3次后出现。

我正在使用scrapy来刮擦和飞溅渲染。

import scrapy
import re
from scrapy_splash import SplashRequest

class Scrapys(scrapy.Spider):
    name = "sqs"
    start_urls = ["https://www.zappos.com","https://www.zappos.com/marty/men-shoes/CK_XAcABAuICAgEY.zso"]
    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse,
                endpoint='render.html',
                args={'wait': 0.5},
            )

    def parse(self, response):
        links = response.css("div._1Mgpu")
        for link in links:
            url = 'https://www.zappos.com' + link.css("a::attr(href)").extract_first()
            yield SplashRequest(url, callback=self.parse_attr,
                endpoint='render.html',
                args={'wait': 10},
            )


    def parse_attr(self, response):
        alsoviewimg = response.css("div._18jp0 div._3Olkk div.QDcUX div.slider div.slider-frame ul.slider-list li.slider-slide a img").extract()

我也从“查看此项目的客户中查看”部分中提取的元素之一。我已经测试了拉动这个和其他元素,所有这些都在scrapy shell中使用splash渲染来获得动态内容,并且它将内容拉得很好,但是在蜘蛛中它很少,如果有的话,会得到任何命中。

我可以设置一些东西,以便加载页面几次以获取内容吗?还是我想念的其他东西?

1 个答案:

答案 0 :(得分:0)

您应该检查您要查找的元素是否存在。如果没有,请再次加载页面。

我会研究为什么刷新页面需要多次尝试,如果没有这种特殊的多次刷新解决方案,您可以解决问题。

Scrapy How to check if certain class exists in a given element

此链接说明了如何查看某个类。