无限分页

时间:2018-12-31 22:02:45

标签: python scrapy

我有一个与Scrapy合作的scrap web项目。而且我有无限分页的URL。我的起始URL是:https://nuevo.jumbo.cl/lacteos-y-bebidas-vegetales/leches-blancas?sl=3a356ef2-a2d4-4f1b-865f-c79b6fcf0f2a&PS=50&cc=18&sm=0&PageNumber=1&fq=C:/1/3/,其中“ PageNumber”是1到N个页面。 我将其放在parse函数的for循环中进行测试:

for i in range(1,100):
        yield FormRequest(
            url=self.base_url+o.path, 
            method="GET", 
            formdata={'sl':'3a356ef2-a2d4-4f1b-865f-c79b6fcf0f2a','PS':'50','cc':'18','sm':'0','PageNumber':str(i),'fq':fq}, 
            callback=self.parse_products,
            meta = {
                  'dont_redirect': True,
            })

但是我需要在没有for循环的情况下执行此操作,因为在“ start_urls”中,我还有更多不同的“ PageNumber”。

所以我需要的是从PageNumber 1转到N,并且当没有更多页面时,停止该请求。

我尝试使用meta dont_redirect,因为当蜘蛛找不到更多页面时,我正在重定向到其他页面。 我尝试在 process_response()中使用中间件,

if response.status == 301:
    raise IgnoreRequest

因此,它不会重定向到另一页,但会继续尝试扫描。

我需要做类似的事情:

while(true):
    yield FormRequest #...etc etc etc...

1 个答案:

答案 0 :(得分:1)

我从网络行为Products api观察到

这是从中获取产品的api,这里AUTHOR_USER_MODEL控制分页,AbstractUser控制产品类别等,但是当pageNumber超过时,它永远不会给您重定向{我有在邮递员中对其进行了测试},但响应为空,因此请检查api调用中是否收到了产品,请增加页码,否则请停止。并更改PageNumber [类别]