私はPython開発者にとって少し新しいです。私はいくつかのWebスクレイピングのためのより大きなプロジェクトを作成しています。私はこれを可能な限り「Pythonically」としてアプローチしたいと思いますし、プロジェクトの構造についていくつかの助けに感謝します。 、基本的に、私は目的のWebサイトにアクセスして、独自の配列にそれにいくつかの特定のデータを解析することで、オブジェクトの基本クラスを持っているPython OOP Project Organization
ジョブ[]
:ここで私は今それをやっている方法ですminion.py
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の異なるデータソースを持っているつもりです。 minCity1.py
:私は今それをやっている方法は、単にそのオブジェクト例えば(およびバインド)を定義し、各「ミニオン」のために別のモジュール、より多くの仕立てgetJobs()関数を作成することです
minions.py
: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)
Iは、単に(私は私は1つを追加するたびに更新しなければならない)、すべてのインスタンス化された手先のオブジェクトのリストを含む別のモジュールを有します
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を参照します。
これは私には少し混乱しているようで、誰かがもっとPythonのアプローチを概説できると思っていました。
ありがとうございました。
[scrapy](http://scrapy.org/)を検討するか、少なくとも[architecture](http://doc.scrapy.org/ja/latest/topics/architecture.html)を調べてください。 )。 –
「これは私にとっては少し混乱しているようですね?どうして?どうやって? **特に**混沌と思われるものを説明してください。あなたは多くのカスタマイズを行っているようです。それ以外にどのようにアプローチすると思いますか? –