Как сделать цикл или другую функцию, чтобы повторить то же самое для цикла снова и снова? - PullRequest
0 голосов
/ 24 апреля 2019

Контент, который я получаю с сайта Dmoz.for loop, который я сделал, я не хочу повторять это каждый раз.Вместо этого я хочу найти способ не повторять каждую функцию.Есть много функций, которые я создал.Я поделился одним, чтобы показать вам, что zip связывает значения имен и искателей.И я не хочу, чтобы for loop повторялось в каждой функции.

def parse_about(self, response):
    # do your stuff on second page
    items = response.meta['items']
    names = {'name1': 'Headings',
             'name2': 'Paragraphs',
             'name3': '3 Projects',
             'name4': 'About Dmoz',
             'name5': 'Languages',
             'name6': 'You can make a differnce', 
             'name7': 'Further Information'
             }

    finder = {'find1': 'h2::text , #mainContent h1::text',
              'find2': 'p::text',
              'find3': 'li~ li+ li b a::text , li:nth-child(1) b a::text',
              'find4': '.nav ul a::text , li:nth-child(2) b a::text',
              'find5': '.nav~ .nav a::text',
              'find6': 'dd::text , #about-contribute::text',
              'find7': 'li::text , #about-more-info a::text'
              }
    for name, find in zip(names.values(), finder.values()):
        items[name] = response.css(find).extract()
        yield items

1 Ответ

1 голос
/ 24 апреля 2019

Предполагая, что текущий код работает должным образом, а остальные функции отличаются только содержимым словарей names и finder, вы можете абстрагировать цикл с помощью такой функции:

def find_items(response, names, finder):
    items = response.meta['items']
    for name, find in zip(names.values(), finder.values()):
        items[name] = response.css(find).extract()
        yield items

Тогда, если вы используете Python 3.3 или выше, вы можете использовать оператор yield from в вызывающих функциях следующим образом:

yield from find_items(reponse, names1, finder1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...