元職業エンジニアの生き方

これまでとこれからを考えるための備忘録

Pythonでクラウドファンディングサイトからプロジェクト取得プログラム(CAMPFIRE版)

こんばんは。

なんちゃってエンジニアです。

元職業エンジニア・プログラマの人工知能と未来の道楽日記

 

以前はサイトからカテゴリを取得したので、今回はそのカテゴリをぐるぐる回して全プロジェクトとURLを取得してみました。

 

※カテゴリ取得のブログは下記です。

adweallab.hatenablog.com

 

データベース設計のブログは下記です。

adweallab.hatenablog.com

 

使用した言語などの情報は以下。

言語;Python3

ライブラリ:BeatifulSoup4

データベース;MySQL5.7

 

全体の流れとしては、

①テーブルからカテゴリ情報を取得

②カテゴリURLがなくなるまで下記を実施

 - カテゴリURLページを開く

 - ページングが終了するまで下記を実施

  1. ページに掲載されているプロジェクト名とURL取得

  2. データの整形

  3. データベース接続でInsert処理

 

ざっくりこんな感じで取得できました。

Makuakeさんの取得と違って、URLチェックをしてページング管理をしています。

 

課題:

①ページングの終了処理の精査

②データを配列化してからデータベース連携のほうがいいのかな。

③トライキャッチをちゃんとやっていない・・・。

 参考:8. エラーと例外 — Python 3.6.1 ドキュメント

 

全文掲載はしませんが、こんな感じで。

def getProject(self, ID):
sw = ''
if ID == '2':
urlReplace = 'https://camp-fire.jp'
res = self.con.selectCategory(ID, self.CWCATEGORY)
for category in res:
pageCnt = 1
CATEGORY = category[1]
while sw != 'end':
urlOpen = category[2] + '/fresh/page:' + str(pageCnt)
sign = self.checkURL(urlOpen)
if sign != "NotFound":
html = urllib2.urlopen(urlOpen)
soup = BeautifulSoup(html, 'lxml')
sw = soup.find_all('meta')[10]['content']
Target = soup.find_all(class_='box-title')
for projectURL in Target:
projectName = self.func_esc(projectURL.a.text.strip())
URL = projectURL.a.get('href').strip()
if URL.find('projects') >= 0:
self.con.insertProject(ID, CATEGORY, projectName, urlReplace + URL)
else:
sw = 'end'
sleep(5)
pageCnt = pageCnt + 1
sw = ''

 

補足として、引数のIDは1,2,3のいずれかをいれます。

1:Makuakeさん

2:CAMPFIREさん

3:Readyforさん

こんなイメージです。

 

「self.CWCATEGORY」は、テーブル名の指定。

「self.checkURL」は、正常なURLであれば、「Found」、異常であれば「NotFound」を返却する関数になっております。

 

まだまだ課題は沢山あるので、時間をみつけてトライキャッチしていきたい。

 

本日の備忘録として。

それでは。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com