如何 select Scrapy 的 xpath 列表最后一个元素前一个 <li>?
How to select Scrapy's xpath one before last element of a list <li>?
我正在抓取一个电子商务网站(例如 link:https://elektromarkt.lt/namu-apyvokos-prekes/virtuves-ir-stalo-reikmenys/keptuves)。我在使用分页时遇到问题,该页面没有下一页按钮(在网站底部)的特定标签或属性,我意识到我没有获得所有数据。我如何使用 xpaths select 最后一个
元素?
在我试图找出它是哪个元素之前,我意识到一些产品列表只有 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)
但是页码正在更改并显示在浏览器的 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':
我正在抓取一个电子商务网站(例如 link:https://elektromarkt.lt/namu-apyvokos-prekes/virtuves-ir-stalo-reikmenys/keptuves)。我在使用分页时遇到问题,该页面没有下一页按钮(在网站底部)的特定标签或属性,我意识到我没有获得所有数据。我如何使用 xpaths select 最后一个
这是我的解析函数:
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)
但是页码正在更改并显示在浏览器的 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':