Вы можете поместить код в класс с помощью метода __init__
для настройки всего, метода _download
для подключения к сайту и его загрузки, метода _store
для сохранения результатов и run
способ связать все это вместе, например так:
class Scraper(object):
def __init__(self, parser, page_generator):
self._parser = parser
self._pages = pages
def _download(self, page):
# do whatever you're already doing to download it
return html
def _store(self, data):
# Do whatever you're already doing to store the data
def run(self):
for page in pages:
html = self._download(page)
data = self._parser.parse(html)
self._store(data)
Этот класс может находиться в вашем файле parser.py
.
В каждом из файлов вашего сайта поместите две вещи.
class Parser(object):
def parse(html):
# All of your rules go here
def pages(some, args, if_, you, need, them): # but they should be the same for all files
return a_list_of_pages_or_generator
Затем вы можете настроить файл python.py
с помощью следующей функции:
def get_scraper(name):
mod = __import__(name)
parser = mod.Parser()
pages = mod.pages() # Pass whatever args you need to figure out the urls
return Scraper(parser, pages)
Затем вы можете использовать его как
scraper = get_scraper('google')
scraper.run()
Делая этоПреимущество way заключается в том, что вам не нужно вносить какие-либо изменения в класс Scraper
.Если вам нужно сделать разные трюки, чтобы заставить серверы общаться с вашим скребком, то вы можете создать класс Downloader
в каждом модуле и использовать его так же, как класс Parser
.Если у вас есть два или более анализатора, которые выполняют одно и то же, просто определите их как универсальный анализатор в отдельном модуле и импортируйте его в модуль каждого сайта, который в этом нуждается.Или подкласс это сделать твики.Не зная, как вы скачиваете и анализируете сайты, трудно быть более конкретным.
Мне кажется, что вам, возможно, придется задать несколько вопросов, чтобы прояснить все детали, но это будет хорошоопыт обучения.