一次将模块导入废蜘蛛的方法?

2024-06-26 00:27:00 发布

您现在位置:Python中文网/ 问答频道 /正文

每次我添加新的蜘蛛网.py为了刮蹭,我需要导入一些模块,例如:

from __future__ import division
from extruct.w3cmicrodata import MicrodataExtractor
from extruct.jsonld import JsonLdExtractor
import scrapy
import re
import logging
from pprint import pprint
from scrapy.exceptions import DropItem
from urlparse import urlparse
import tldextract
import json
....

每次都添加这些模块是很无聊的。在

我是python新手,有没有一种方法可以将这些东西导入一次,然后不需要为每个spider文件导入它们?就像php一样。在


Tags: 模块frompyimportrefuturedivisionpprint
1条回答
网友
1楼 · 发布于 2024-06-26 00:27:00

您可以将所有这些导入放到一个模块中(我的导入.py)然后运行from .myimports import *,但这是一个不好的实践-在Python中,这种隐式导入是非常不推荐的,因为这样会降低代码的可维护性。在

如果您有通用的导入,那么这些spider中可能有一些通用代码,您可以将其提取到实用程序函数库中,或者提取到一个基本spider类中?在

您还可以使用scrapy genspider命令和自定义蜘蛛模板。创建具有以下结构的文件夹:

mytemplates
  spiders
    myspider.tmpl

然后将项目的TEMPLATES_DIR选项设置为该文件夹,将spider模板(只是一个包含starterpython代码的文件)放入myspider.tmpl文件中。在

当前,name和{}是必需的genspider参数;您可以在模板中使用这些变量,例如

^{pr2}$

然后运行scrapy genspider list检查模板是否可用,然后运行scrapy genspider -t myspider <spider-name> <domain-to-crawl>。在

还有其他更通用的模板生成实用程序-看看cookiecutter。在

在我看来,方法是提取通用代码,这应该有助于减少导入列表;代码生成是一个更糟糕的解决方案,一个包含所有导入的模块是一个糟糕的解决方案,这是最糟糕的。在

不要太担心导入的长列表,在Python中,在文件的顶部有这样的导入列表是很常见的,这样做是好的——您可以看到函数或类的来源,这使得调试更容易。在

相关问题 更多 >