diff --git a/Pipfile b/Pipfile index 55d0687b..6082be65 100644 --- a/Pipfile +++ b/Pipfile @@ -44,7 +44,7 @@ pyOpenSSL = "==17.5.0" Scrapy = "==1.5.0" Twisted = "==17.9.0" "zope.interface" = "==4.4.3" -psycopg2-binary = "==2.7.4" +psycopg2-binary = "==2.7.5" [requires] python_version = "3" diff --git a/Pipfile.lock b/Pipfile.lock index e9f30a64..4b4a2bac 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "6ba15060c5753606c76a24e40cb283f8763d0882ae78a1c7df36b3beb86b7026" + "sha256": "bef1590c04aa9ccbefb062c53701057816cb99b9607f1f32db52e6a8b2d0bfd1" }, "pipfile-spec": 6, "requires": { @@ -272,36 +272,39 @@ }, "psycopg2-binary": { "hashes": [ - "sha256:02eb674e3d5810e19b4d5d00720b17130e182da1ba259dda608aaf33d787347d", - "sha256:3a14baeabcebd4662f12f4bff03e0574a2369a2e41baf829e6fb4a24c95cf88b", - "sha256:436a503eda41f6adb08f292f40a3784fce0a5f351b6ae7b19a911904db53af93", - "sha256:465ff1d427ed42c31e456dbbd9edab3552be18a0edaef7450c5b3e6fee745052", - "sha256:4a1a5ea2fa4b53191637b162873a82822d92a85a08beefe28296b8eb5cf2fea5", - "sha256:4a4f23a08fbccbe40ecdb5384d807bcb469ea71dd87e6be2e80b036b8e6d47df", - "sha256:77a2fc622a1f2d08a707673c9be5769d521f03d867d305f172bb417fa7882754", - "sha256:8014c06a9ed7b78ba81beff3ae71acd78c212390f8ed839e9ce22735880bd5b4", - "sha256:83af04029bcb4b56c852e5876fef71340dcb465fa44fc99f80bac72e10fb0b74", - "sha256:86c0d2587f56776f25d52cca8e275adf495c8e01933fbfc2ca23b124610ab761", - "sha256:9305d7cbc802aaefac5c75a3df725f2654797369f32b18d4d0adb382dfab6c09", - "sha256:9b5ddbed85ec73293695d7116589d956ef0dd3fcf7bf3b2a3bc1e8e54c1d543a", - "sha256:a3d2cc0cb0b988dbfd0d11f7fac34058b25a6ce533ed5b8e88d6cb315e77d54a", - "sha256:ab1db8f3e96570d9f7ebc45133ce2574804b2280499baade178e163d022107b5", - "sha256:b039f51bca1ddd70234cc3f84f94f42ad43861b931bdfb497f887c60c39a6565", - "sha256:b287ddf4cafcfb632974907d1e7862119e36bb758228bdb07dd247553e4cdfc0", - "sha256:b6b2b26590304d97ef2af28d153ee99ace6fe0806934f4618edfc87216c77f91", - "sha256:c4c6004d410c77bfa5389ae9485498ce32805447a67afbfe8db0d247a5c88fa1", - "sha256:c606bff0978ee4858d86d40f6b6ab0c4cac4474f627bd054683dc03a4fc1a366", - "sha256:c8220c521a408b41c4f14036004a621ed0d965941286b978cd2ea2623fabd755", - "sha256:cb07184a4bfad304831f0a88b1c13fbd8cf9fcdf1f11e71c477dd6d7b1b078a0", - "sha256:cf3911fba0c47fc1313b5783183cda301032b14637a0b7a336766ae46998c7ee", - "sha256:d0972f062c73956332e9681dfdb133168618f0abfecc96e89f0205ac89cd454b", - "sha256:d1dd3eb8edd354083f5d27b968c5a17854c41347ba5a480b520be85ec1a8495c", - "sha256:d51c7ed810fce1e50464088c37cc8da05534de8afb12a732500827ebcc480081", - "sha256:d8940b5104588d6313315e037f0f5ed68d2e5f62ccc1c429d3cff11d2ba6de3f", - "sha256:de4f88f823037a71ea5ef3c1041d96b8a68d73343133edda684fd42f575bd9d7" - ], - "index": "pypi", - "version": "==2.7.4" + "sha256:04afb59bbbd2eab3148e6816beddc74348078b8c02a1113ea7f7822f5be4afe3", + "sha256:098b18f4d8857a8f9b206d1dc54db56c2255d5d26458917e7bcad61ebfe4338f", + "sha256:0bf855d4a7083e20ead961fda4923887094eaeace0ab2d76eb4aa300f4bbf5bd", + "sha256:197dda3ffd02057820be83fe4d84529ea70bf39a9a4daee1d20ffc74eb3d042e", + "sha256:278ef63afb4b3d842b4609f2c05ffbfb76795cf6a184deeb8707cd5ed3c981a5", + "sha256:3cbf8c4fc8f22f0817220891cf405831559f4d4c12c4f73913730a2ea6c47a47", + "sha256:4305aed922c4d9d6163ab3a41d80b5a1cfab54917467da8168552c42cad84d32", + "sha256:47ee296f704fb8b2a616dec691cdcfd5fa0f11943955e88faa98cbd1dc3b3e3d", + "sha256:4a0e38cb30457e70580903367161173d4a7d1381eb2f2cfe4e69b7806623f484", + "sha256:4d6c294c6638a71cafb82a37f182f24321f1163b08b5d5ca076e11fe838a3086", + "sha256:4f3233c366500730f839f92833194fd8f9a5c4529c8cd8040aa162c3740de8e5", + "sha256:5221f5a3f4ca2ddf0d58e8b8a32ca50948be9a43351fda797eb4e72d7a7aa34d", + "sha256:5c6ca0b507540a11eaf9e77dee4f07c131c2ec80ca0cffa146671bf690bc1c02", + "sha256:789bd89d71d704db2b3d5e67d6d518b158985d791d3b2dec5ab85457cfc9677b", + "sha256:7b94d29239efeaa6a967f3b5971bd0518d2a24edd1511edbf4a2c8b815220d07", + "sha256:89bc65ef3301c74cf32db25334421ea6adbe8f65601ea45dcaaf095abed910bb", + "sha256:89d6d3a549f405c20c9ae4dc94d7ed2de2fa77427a470674490a622070732e62", + "sha256:97521704ac7127d7d8ba22877da3c7bf4a40366587d238ec679ff38e33177498", + "sha256:a395b62d5f44ff6f633231abe568e2203b8fabf9797cd6386aa92497df912d9a", + "sha256:a6d32c37f714c3f34158f3fa659f3a8f2658d5f53c4297d45579b9677cc4d852", + "sha256:a89ee5c26f72f2d0d74b991ce49e42ddeb4ac0dc2d8c06a0f2770a1ab48f4fe0", + "sha256:b4c8b0ef3608e59317bfc501df84a61e48b5445d45f24d0391a24802de5f2d84", + "sha256:b5fcf07140219a1f71e18486b8dc28e2e1b76a441c19374805c617aa6d9a9d55", + "sha256:b86f527f00956ecebad6ab3bb30e3a75fedf1160a8716978dd8ce7adddedd86f", + "sha256:be4c4aa22ba22f70de36c98b06480e2f1697972d49eb20d525f400d204a6d272", + "sha256:c2ac7aa1a144d4e0e613ac7286dae85671e99fe7a1353954d4905629c36b811c", + "sha256:de26ef4787b5e778e8223913a3e50368b44e7480f83c76df1f51d23bd21cea16", + "sha256:e70ebcfc5372dc7b699c0110454fc4263967f30c55454397e5769eb72c0eb0ce", + "sha256:eadbd32b6bc48b67b0457fccc94c86f7ccc8178ab839f684eb285bb592dc143e", + "sha256:ecbc6dfff6db06b8b72ae8a2f25ff20fbdcb83cb543811a08f7cb555042aa729" + ], + "index": "pypi", + "version": "==2.7.5" }, "pyasn1": { "hashes": [ diff --git a/README.md b/README.md index a724cbf8..990b4f4f 100644 --- a/README.md +++ b/README.md @@ -3,50 +3,63 @@ 長期收集各租屋網站、品牌公寓的可公開資訊,清洗後整理成格式統一的資料,供後續有需要的人使用。 - 專案資訊請見 [hackpad](https://g0v.hackpad.tw/Ih7Jp4pUD5y)。 +- 爬蟲套件請見 [PyPI](https://pypi.org/project/scrapy-tw-rental-house/) +## 程式使用方式與注意事項 -# 程式使用方式與注意事項 +本專案總共分為兩部份: -本程式還在初期開發階段,任何框架、資料庫定義、API 皆有可能更動。 +1. 爬蟲本人,只需要 Scrapy 即可使用,不綁資料庫。 + - [原始碼](https://github.com/g0v/tw-rental-house-data/tree/master/scrapy-package) + - [套件網頁](https://pypi.org/project/scrapy-tw-rental-house/) +2. 完整的開放資料流程,包含爬蟲、資料儲存、網頁。 + - [原始碼](https://github.com/g0v/tw-rental-house-data) + - [網站](https://rentalhouse.g0v.ddio.io) + +本專案還在初期開發階段,任何框架、資料庫定義、API 皆有可能更動。 關於開發的詳細資訊,請參見[專案 wiki](https://github.com/g0v/tw-rental-house-data/wiki/) -## 資料庫與網頁後端 -### 環境需求 -1. Python3 + pip -2. 需要安裝 [PostgreSQL](https://www.postgresql.org) ,否則 `wheel` 在 build `psycopg2-binary` 時會失敗。 -3. 支援 GeoDjango 的資料庫,目前[主要的關聯式資料庫都有支援](https://docs.djangoproject.com/en/2.1/ref/contrib/gis/db-api/)。關於如何準備 GeoDjango 所需的系統環境,請參見[官方文件](https://docs.djangoproject.com/en/1.10/ref/contrib/gis/install/#installation) +### 爬蟲本人 + +關於環境需求與使用方式,請見[套件網頁](https://pypi.org/project/scrapy-tw-rental-house/)。 + +### 資料庫與網頁後端 + +#### 環境需求 -### Peewee -> Django 遷移步驟 -1. 理論上可以直接用 Django 內建工具,因為 0001_migration 的內容與 Peewee 完全相同 -2. 唯一的例外是 PostgreSQL ,請在遷移完畢後,執行 `python manage.py migratepeewee` , - 使用方式請參見 `--help` +1. Python3.5+ +2. pip +3. pipenv (選用) +4. [PostgreSQL](https://www.postgresql.org) 9.5+ + - 使用 PostgresSQL 以外的資料庫時,爬蟲可以順利執行,但使用內建的匯出指令時無法用 `-u --unique` 去除重複物件 +5. GeoDjango ,目前[主要的關聯式資料庫都有支援](https://docs.djangoproject.com/en/2.1/ref/contrib/gis/db-api/) + - 關於如何準備 GeoDjango 所需的系統環境,請參見[官方文件](https://docs.djangoproject.com/en/1.10/ref/contrib/gis/install/#installation) + +#### 資料庫設定 -### 使用方式 ```sh -# 安裝相關套件 +# 使用 virtualenv 安裝相關套件 virtualenv -p python3 . pip install -r requirements.txt +. ./bin/activate + +# 也可使用 pipenv 安裝相關套件 +pipenv install cd backend -# 設定資料庫(預設使用 sqlite ) +# 設定資料庫(預設使用 sqlite) ## 詳細資訊請見 [Django 官網](https://docs.djangoproject.com/en/2.0/topics/settings/) ## 如果想用 PostgreSQL 9.3+ ,推薦打開 USE_NATIVE_JSONFIELD ,可以使用內建的 jsonb vim backend/settings_local.py # 設定資料庫 ## 使用 --fake-init 可以讓 Django 跳過已存在的 migration script -## (如果你之前有乖乖把 DB 建好的話) -python manage.py migrate --fake-init +python manage.py migrate python manage.py loaddata vendors ``` -## 爬蟲 - -### 環境需求 -1. Python3 + pip - -### 使用方式 +#### 爬蟲使用方式 確定資料庫準備完成後,執行以下步驟: @@ -61,7 +74,13 @@ vim crawler/settings.py ./go.sh ``` -### 注意事項 +#### 資料匯出 + +```bash +python backend/manage.py export --help +``` + +#### 注意事項 1. 請友善對待租屋網站,依其個別網站使用規則容許的方式與頻率來查詢資料,建議可使用 Scrapy 內附的 [DOWNLOAD_DELAY](https://doc.scrapy.org/en/latest/topics/settings.html#std:setting-DOWNLOAD_DELAY) 或 @@ -71,12 +90,14 @@ vim crawler/settings.py 需符合現行法令的要求且自負其責,包括但不限於個人隱私、資料保護、資訊安全,以及公平競爭等相關規定。 4. 其他事項請參見[授權頁面](LICENSE)。 -## 網頁前端 +### 網頁前端 + +#### 環境需求 -### 環境需求 1. node 8+ -### 使用方式 +#### 使用方式 + ```sh # 安裝套件 cd web/ui @@ -89,9 +110,7 @@ npm run dev 詳細操作方式,請參見 [nuxt](https://nuxtjs.org/) - -# 非宅界專案貢獻者 +## 非宅界專案貢獻者 - [Lucien C.H. Lin (林誠夏)](lucien.cc) - [勞工陣線](http://labor.ngo.tw/) 洪敬舒 - diff --git a/requirements.txt b/requirements.txt index 1a44afd8..c6fcba44 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ lazy-object-proxy==1.3.1 lxml==4.2.0 mccabe==0.6.1 parsel==1.4.0 -psycopg2-binary==2.7.4 +psycopg2-binary==2.7.5 pyasn1==0.4.2 pyasn1-modules==0.2.1 pycparser==2.18