如何在列表的最后一个元素之前选择Scrapy的xpath< li>?

b1zrtrql  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(134)

我正在刮一个电子商务网站(例如,链接:https://elektromarkt.lt/namu-apyvokos-prekes/virtuves-ir-stalo-reikmenys/keptuves)。我在使用分页时遇到了一个问题,页面没有下一页按钮的特定标签或属性(在网站底部),我意识到我没有获得所有数据。我如何选择倒数第二个
1.元素使用xpaths?之前我试图找出它是哪个元素,但我意识到一些产品列表只有1-3页,这使得它们无效。
这是我的解析函数:

def parse_items(self,response):
    for href in response.xpath(self.getAllItemsXpath):
        url = response.urljoin(href.extract())
        yield scrapy.Request(url,callback=self.parse_main_item, dont_filter=True)

    nexter_page = response.xpath('/html/body/div[1]/div[2]/div[1]/div[6]/div[2]/div[2]/div/div[2]/div[3]/div/div/div[2]/div[3]/div[1]/ul/li[12]/a/@href').extract_first()
    if nexter_page is None:
        next_page = response.xpath('/html/body/div[1]/div[2]/div[1]/div[6]/div[2]/div[2]/div/div[2]/div[3]/div/div/div[2]/div[3]/div[1]/ul/li[10]/a/@href').extract_first()
        url = response.urljoin(next_page)
        yield scrapy.Request(url, callback=self.parse)
    else: 
        url = response.urljoin(nexter_page)
        yield scrapy.Request(url, callback=self.parse)
rqmkfv5c

rqmkfv5c1#

但是页码会发生变化并显示在浏览器的url上,您可以使用for循环从start_urls进行分页。

import scrapy
from scrapy.crawler import CrawlerProcess

class TestSpider(scrapy.Spider):
    name = 'test'
    start_urls=['https://elektromarkt.lt/namu-apyvokos-prekes/virtuves-ir-stalo-reikmenys/keptuves?page='+str(x)+'' for x in range(1,3)]

    def parse(self, response):
       print(response.url)

if __name__ == "__main__":
    process =CrawlerProcess()
    process.crawl()
    process.start()

输出:

https://elektromarkt.lt/namu-apyvokos-prekes/virtuves-ir-stalo-reikmenys/keptuves?page=1
https://elektromarkt.lt/namu-apyvokos-prekes/virtuves-ir-stalo-reikmenys/keptuves?page=2

 'downloader/response_status_count/200':

相关问题