Я хочу извлечь все 50 наборов данных со страницы результатов поиска с помощью scrapy.
Первоначально я использовал для извлечения каждого набора данных со страниц продукта, чтобы легко найти на странице соскоба go. Мне пришла в голову идея получить все необходимые данные только со страницы результатов поиска, поскольку это все данные, которые мне нужны в пределах фрагментов страницы продукта. Таким образом, несколько наборов результатов на каждой странице вместо одного.
Мой код действительно подсчитывает количество наборов данных, а затем должен циклически проходить по наборам данных для извлечения данных.
например
# how many datasets on this page?
datasets = len(response.xpath('//div[@class="col-result-list"]'))
Теперь переберите все элементы:
for i in range(0, datasets):
print('dataset_' + str(i))
# new dataset
mouse = mouseItem()
mouse['i02_title'] = response.xpath('//div[@class="col-result-list"][' + str(i) + ']/div[@class="result-list-entry"]/text()').extract_first()
return mouse
К сожалению, это работает не так, как ожидалось. Функция просто возвращает 1 набор данных, и я предполагаю, что это потому, что я возвращаю объект слишком рано или в неправильной точке.
Это весь класс:
class GetbidSpider(CrawlSpider):
name = 'test'
allowed_domains = ['www.test.com']
start_urls = ['https://www.test.com/all-from-category/']
rules = (
# parse this pages
Rule(
LinkExtractor(allow=['.*test\.com\/all\-from\-category\/\?resultsPerPage=100\&pageNumber=(\d.*)&\$cat=nvkps23f7dy']),
callback='parse_item'
),
# follow all the index urls
Rule(
LinkExtractor(allow=['.*test\.com\/all\-from\-category\/\?resultsPerPage=100\&pageNumber=(\d.*)&\$cat=nvkps23f7dy']),
follow=True
),
)
def parse_item(self, response):
# how many datasets on this page?
datasets = len(response.xpath('//div[@class="col-result-list"]'))
print("Amount of data sets:" + str(datasets))
# get the individual datasets
for i in range(0, datasets):
print('dataset_' + str(i))
# new dataset
mouse = mouseItem()
mouse['i02_title'] = response.xpath('//div[@class="col-result-list"][' + str(i) + ']/div[@class="result-list-entry"]/div[@class="result-list-entry-data"]/div[@class="result-list-entry-title"]/a/text()').extract_first()
return mouse
Как я могу изменить мой код для получения всех наборов данных с одной страницы?