首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python OOP项目组织

Python OOP项目组织
EN

Stack Overflow用户
提问于 2012-02-09 19:42:48
回答 1查看 514关注 0票数 0

我对Python有点陌生--我正在为一些web抓取创建一个更大的项目。我希望尽可能地将其作为“project”来处理,并希望对项目结构提供一些帮助。我现在是这样做的:

基本上,我有一个对象的基类,它的目的是访问一个网站并将其中的一些特定数据解析到它自己的数组jobs[]中。

minion.py

代码语言:javascript
运行
复制
class minion:

# Empty getJobs() function to be defined by object pre-instantiation
def getJobs(self):
    pass

# Constructor for a minion that requires site authorization
# Ex:  minCity1 = minion('http://portal.com/somewhere', 'user', 'password')
# or   minCity2 = minion('http://portal.com/somewhere')
def __init__(self, title, URL, user='', password=''):
    self.title = title
    self.URL = URL
    self.user = user
    self.password = password
    self.jobs = []
    if (user == '' and password == ''):
            self.reqAuth = 0
    else:
        self.reqAuth = 1

def displayjobs(self):
    for j in self.jobs:
        j.display()

我将有大约100个不同的数据源。我现在要做的就是为每个"Minion“创建一个单独的模块,它为该对象定义(并绑定)一个定制的getJobs()函数

示例: minCity1.py

代码语言:javascript
运行
复制
from minion import minion
from BeautifulSoup import BeautifulSoup
import urllib2
from job import job

# MINION CONFIG
minTitle = 'Some city'
minURL = 'http://www.somewebpage.gov/'

# Here we define a function that will be bound to this object's getJobs function
def getJobs(self):
    page = urllib2.urlopen(self.URL)
    soup = BeautifulSoup(page)

    # For each row
    for tr in soup.findAll('tr'):
        tJob = job()
        span = tr.findAll(['span', 'class="content"'])

        # If row has 5 spans, pull data from span 2 and 3 ( [1] and [2] )
        if len(span) == 5:
            tJob.title = span[1].a.renderContents()
            tJob.client = 'Some City'
            tJob.source = minURL
            tJob.due = span[2].div.renderContents().replace('<br />', '')
            self.jobs.append(tJob)

# Don't forget to bind the function to the object!
minion.getJobs = getJobs

# Instantiate the object
mCity1 = minion(minTitle, minURL)

我还有一个单独的模块,它只包含所有实例化的minion对象的列表(每次添加一个都必须更新这些对象):

minions.py

代码语言:javascript
运行
复制
from minion_City1 import mCity1
from minion_City2 import mCity2
from minion_City3 import mCity3
from minion_City4 import mCity4

minionList = [mCity1,
              mCity2,
              mCity3,
              mCity4]

main.py引用了用于操作聚合数据的所有活动的minionList。

这在我看来有点混乱,我希望有人能勾勒出一种更毕达通的方法。

谢谢你,很抱歉给你这么长的邮件!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-09 19:48:12

与其创建函数并将它们分配给对象(或任何minion,我不太确定),您应该使用类来代替。然后,您将为每个数据源创建一个类。

如果需要,甚至可以从公共基类继承这些类,但这并不是绝对必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9217591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档