Я очищаю сайт. Но у меня есть проблема. Я создал класс и переменную и дал ей ссылку для очистки данных. Но на сайте есть много категорий на одной странице. Означает, что названия стран перечислены в алфавитном порядке A, B upto Z
. Я сделал цикл, чтобы просто ввести первый алфавит страны, начиная с A, B upto Z
, чтобы я не мог повторять ссылки снова и снова. Но это не работает. Он просто дает мне названия стран, которые находятся в конце списка переменных eleventh_category
. Если список заканчивается буквой C, я получу только названия стран, начиная с C, а не B и A. Надеюсь, вы поняли ..
class DmozSpiderSpider(scrapy.Spider):
name = 'Dmoz'
start_urls = ['http://dmoz-odp.org/']
eleventh_category = ['A','B','C']
for again in eleventh_category:
save = f'http://dmoz-odp.org/Regional/{again}/'
def parse(self, response):
# collect data on page
items = {
'Navbar': response.css('#main-nav a::text').extract(),
'Category_names': response.css('.top-cat a::text').extract(),
'Subcategories': response.css('.sub-cat a::text').extract(),
# this is eleventh_category
'Eleventh_category': self.save
}
# save and call request to another page
dct = [(self.save, self.alpha_country)]
for page, callback in dct:
yield response.follow(page, callback, meta={'items': items})
def find_items(self, response, names, finder):
items = response.meta['items']
for name, find in zip(names.values(), finder.values()):
items[name] = response.css(find).extract()
yield items
def alpha_country(self, response):
items = response.meta['items']
names = {'name1': 'Countries'}
finder = {'finder1': '.browse-node::text'}
for name, find in zip(names.values(), finder.values()):
items[name] = [i.strip() for i in response.css(find).extract() if i.strip()]
yield items