Я стараюсь максимально использовать функциональное программирование, потому что это удобнее и, прежде всего, легче читать и исправлять.Ну, это должно было объяснить цель моего исходного кода.
древовидная диаграмма
scrapy_project
|_ scrapy.cfg
|_ scrapy_project
|_ __init__.py
|_ module_parsing.py
|_ module_correction.py
|_ items.py
|_ ...
|_ spiders
|_ crawling_spider.py
module_parsing.py
и module_correction.py
- мои собственные модули.
module_parsing.py и module_correction.py
В module_parsing.py
у меня есть такие функции.
import re
import datetime as dt
import dateparser
def noms_entraineurs(response, arg_disc):
"""Return a list of names"""
ent = parse instructions
return ent
и т. д.
И поскольку я не совершенен,Я делаю некоторые ошибки синтаксического анализа и хочу исправить это, поэтому для конкретного метода моего паука я думаю о создании функции со словарем внутри нее с полем в качестве ключа и функцией (функцией синтаксического анализа) в качестве значения.
Это дает что-то вроде этого.
from .module_parsing import *
def fonction_parse_correction(
field, response, arg_desc, arg_disc, arg_true_false):
dico_fonction_parse = {
'discipline': discipline(arg_desc),
...
'entraineurs' : noms_entraineurs(response,
arg_disc),
...
}
return dico_fonction_parse[field]
Вот так, я надеюсь, мне просто нужно написать:
fonction_parse_correction(field, response, arg_desc, arg_disc, arg_true_false)
Это то, что я попробовал воболочка scrapy, но она не удалась с NameError: name 'function_name' is not defined
, пытаясь в оболочке scrapy
Я запустил в оболочке scrapy shell https://website.com
После того, как я импортировал настроенные модули, как показано Камерон это дает следующее.
In [1]: import sys
In [2]: sys.path.insert(0,'/home/user/directory_a/.../scrapy_project/scrapy_project')
In [3]: from module_parsing import *
#and it worked well here
...
In [7]: from module_correction import *
...
In [10]: fonction_parse_correction('entraineurs',response,arg_desc,'attele',False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-10-137e645b094c> in <module>
----> 1 fonction_parse_correction('entraineurs',response,arg_desc,'attele',False)
~/.../scrapy_project/scrapy_project/module_correction.py in fonction_parse_correction(field, response, arg_desc, arg_disc, arg_true_false)
50
51 dico_fonction_parse = {
---> 52 'allocation': allocation_devise(response)[0],
53 'devise': allocation_devise(response)[1],
54 'hippodrome':hippodrome_numreu_prix(response)[0],
NameError: name 'allocation_devise' is not defined
Итак, я хотел бы знать, почему я получил этоNameError
в то время как я явно импортировал module_parsing.py
в module_correction.py
, чтобы получить все функции и их имена.
Примечания: Ubuntu 18.04, Scrapy 1.5.2, Python 3.7.1