Я пытаюсь очистить данные со страницы и продолжить очистку, следуя ссылке пагинации.
Страница, которую я пытаюсь очистить, - -> здесь
# -*- coding: utf-8 -*-
import scrapy
class AlibabaSpider(scrapy.Spider):
name = 'alibaba'
allowed_domains = ['alibaba.com']
start_urls = ['https://www.alibaba.com/catalog/agricultural-growing-media_cid144?page=1']
def parse(self, response):
for products in response.xpath('//div[contains(@class, "m-gallery-product-item-wrap")]'):
item = {
'product_name': products.xpath('.//h2/a/@title').extract_first(),
'price': products.xpath('.//div[@class = "price"]/b/text()').extract_first('').strip(),
'min_order': products.xpath('.//div[@class = "min-order"]/b/text()').extract_first(),
'company_name': products.xpath('.//div[@class = "stitle util-ellipsis"]/a/@title').extract_first(),
'prod_detail_link': products.xpath('.//div[@class = "item-img-inner"]/a/@href').extract_first(),
'response_rate': products.xpath('.//i[@class = "ui2-icon ui2-icon-skip"]/text()').extract_first('').strip(),
#'image_url': products.xpath('.//div[@class = ""]/').extract_first(),
}
yield item
#Follow the paginatin link
next_page_url = response.xpath('//link[@rel = "next"]/@href').extract_first()
if next_page_url:
yield scrapy.Request(url=next_page_url, callback=self.parse)
Это не работает, потому что URL-адрес недействителен. Если вы хотите продолжать использовать scrapy.Request
, вы можете использовать:
next_page_url = response.xpath('//link[@rel = "next"]/@href').extract_first()
if next_page_url:
next_page_url = response.urljoin(next_page_url)
yield scrapy.Request(url=next_page_url, callback=self.parse)
Более короткое решение:
next_page_url = response.xpath('//link[@rel = "next"]/@href').extract_first()
if next_page_url:
yield response.follow(next_page_url)
Чтобы ваш код заработал, вам нужно исправить неработающую ссылку, используя response.follow()
или что-то подобное. Попробуйте следующий подход.
import scrapy
class AlibabaSpider(scrapy.Spider):
name = 'alibaba'
allowed_domains = ['alibaba.com']
start_urls = ['https://www.alibaba.com/catalog/agricultural-growing-media_cid144?page=1']
def parse(self, response):
for products in response.xpath('//div[contains(@class, "m-gallery-product-item-wrap")]'):
item = {
'product_name': products.xpath('.//h2/a/@title').extract_first(),
'price': products.xpath('.//div[@class = "price"]/b/text()').extract_first('').strip(),
'min_order': products.xpath('.//div[@class = "min-order"]/b/text()').extract_first(),
'company_name': products.xpath('.//div[@class = "stitle util-ellipsis"]/a/@title').extract_first(),
'prod_detail_link': products.xpath('.//div[@class = "item-img-inner"]/a/@href').extract_first(),
'response_rate': products.xpath('.//i[@class = "ui2-icon ui2-icon-skip"]/text()').extract_first('').strip(),
#'image_url': products.xpath('.//div[@class = ""]/').extract_first(),
}
yield item
#Follow the paginatin link
next_page_url = response.xpath('//link[@rel = "next"]/@href').extract_first()
if next_page_url:
yield response.follow(url=next_page_url, callback=self.parse)
Ваш вставленный код имеет плохой отступ. Я это тоже исправил.