muffet 後端更新 - 本地開發
用 ipython 來看本地開發狀況
前情提要:
如果今天客戶的 muffet 裡面的 insert 是使用後端更新,就要到 ec 這個 repo 來修改,資料庫吃的是這個 repo,最後輸出成 op 要用 feed
重要事情提醒
如何判斷 前/後端 更新
判斷是前端更新還是後端更新是以下面這兩個來看:
// 前端更新
insertPixel(`//track.tagtoo.com.tw/up?t=u&${product.toQueryString()}`)
// 後端更新
const api_tagtoo = `//api.tagtoo.com.tw/v1/refresh_product_item?url=${encodeURIComponent(location.href)}`
insertPixel(api_tagtoo)
muffet 和 前後端更新的關係
muffet 檔案是設定像素追蹤,而前後端更新是當我們會送到資料庫的東西,最後 feed 產出的東西就是從我們雲端資料庫存的東西整理出來的
本機開發
流程大綱
- 準備虛擬環境
- 拉下 ec repo
- 安裝 ipython 和 進入 ipython 環境
- 安裝相關套件 (bs4、requests)
- import 檔案 - import ec.site
- 導入你想要看的產品 - 使用 site.get_item_by_url(“產品連結”)
Ps. 這個專案要用 python2 來實作,用 python3 會失敗喔
步驟一:準備虛擬環境
為了避免污染電腦的環境,所以我們準備一個虛擬環境,等等安裝的套件都會裝在我們的虛擬環境裡面
- 安裝 virtualenv
$ pip install virtualenv==16.7.10
Ps. 要指定 virtualenv 版本的原因是因為 太新的版本不支援 python2
- 確認你的 python2 目前安裝在哪
要先確認位置的原因是因為我們等等要用
$ where python2
-------
/Users/yee0526/.pyenv/shims/python2
- 產生虛擬環境,並且指定這個虛擬環境的 python版本 要用 python2
# 產生資料夾
$ mkdir python2-vir
$ cd python2-vir
# $ virtualenv -p '你python2安裝的位置' '產生資料夾的名稱'
$ virtualenv -p /Users/yee0526/.pyenv/shims/python2 myenv
- 進入虛擬環境
- 對於 Linux/macOS 系統:
$ source myenv/bin/activate
- 對於 Windows 系統:
$ myenv\Scripts\activate
步驟二:拉下 repo
$ git clone git@github.com:Tagtoo/ec.git
步驟三:安裝 ipython 相關套件
- 確認目前這個虛擬環境裡面有下載哪些東西
會發現我們的環境目前只有一些東西
$ pip list
------
Package Version
---------- -------
pip 20.3.4
setuptools 44.1.1
wheel 0.37.1
- 安裝 ipython
$ pip install ipython
我們來看一下有沒有成功安裝:
$ pip list
------
Package Version
---------------------------------- -----------
appnope 0.1.3
backports.functools-lru-cache 1.6.6
backports.shutil-get-terminal-size 1.0.0
decorator 4.4.2
enum34 1.1.10
ipython 5.10.0
ipython-genutils 0.2.0
pathlib2 2.3.7.post1
pexpect 4.8.0
pickleshare 0.7.5
pip 20.3.4
prompt-toolkit 1.0.18
ptyprocess 0.7.0
Pygments 2.5.2
scandir 1.10.0
setuptools 44.1.1
simplegeneric 0.8.1
six 1.16.0
traitlets 4.3.3
typing 3.10.0.0
wcwidth 0.2.6
wheel 0.37.1
會發現我們環境裡面突然多了一堆東西,可以確認我們有成功安裝
- 進到資料夾裡面並啟動 ipython
$ cd ec/
$ ipython
Python 2.7.18 (default, Jun 16 2023, 16:18:26)
Type "copyright", "credits" or "license" for more information.
IPython 5.10.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
Ps. 這邊要提醒一件事,因為原本我的本機環境也有安裝 ipython,不過本機環境是預設 python3,所以導致虛擬環境裡面雖然我一開始有預設是python2,但是還是被預設成 python3,雖然不知道是不是這個原因,但是當我把全域的 ipython 刪掉後,再次啟動虛擬環境的 ipython,就正常吃到 python2 了。
步驟四:安裝其他套件
進到 ipython 後,我們來 import 我們的檔案吧!
Ps. 我們現在在剛剛拉下來的 repo 裡面喔
# python2-vir/ec
import ec.site
# ...省略
ImportError: No module named requests
ModuleNotFoundError: No module named 'schema'
ImportError: No module named bs4
安裝剛剛遇到的所有沒安裝套件:
$ pip install requests
$ pip install schema
$ pip install bs4
步驟五:import 檔案
- 引入變數
# 這個成功引入後,會發現我們的環境裡面有存入一個 ec
In [1]: import ec.site
# 可以用這個指令看
In [6]: whos
Variable Type Data/Info
================================
ec module <module 'ec' from 'ec/__init__.pyc'>
- 確認變數
In [11]: from ec.site import site
In [12]: whos
Variable Type Data/Info
================================
ec module <module 'ec' from 'ec/__init__.pyc'>
site EC_Site <ec.ec_site.EC_Site object at 0x1183fd148>
步驟六:指定產品連結查看資訊
方法解釋:
> site.get_item_by_url("產品連結")
正式輸入:
In [13]: site
Out[13]: <ec.ec_site.EC_Site at 0x1183fd148>
In [14]: site.get_item_by_url("https://www.s3.com.tw/TC/PDContent.aspx?yano=S00014739")
/Users/yee0526/Desktop/muffet/good/myenv/lib/python2.7/site-packages/urllib3/connectionpool.py:1063: InsecureRequestWarning: Unverified HTTPS request is being made to host 'www.s3.com.tw'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
InsecureRequestWarning,
Out[15]:
{'advertiser_id': 163,
'category_path': u'\u7f8e\u9ad4\u4fdd\u990a > \u8eab\u9ad4\u4fdd\u990a > \u8eab\u9ad4\u4e73\u6db2\uff5c\u4fdd\u6fd5\u971c\uff5c\u6309\u6469\u6cb9',
'description': u'\u53bb\u9664\u7570\u5473\uff0c\u5ae9\u767d\u808c\u819a \u542b\u690d\u7269\u8403\u53d6\u6210\u5206\uff0c\u6eab\u548c\u4fdd\u6fd5',
'expire': datetime.datetime(2023, 7, 22, 4, 14, 58, 557444),
'extra': {'google_product_category': '', 'variants': []},
'image_url': u'https://photo.s3.com.tw/yaImg/S00014739/S00014739-01.jpg?1686124785083',
'keywords': u'None',
'link': 'https://www.s3.com.tw/TC/PDContent.aspx?yano=S00014739',
'live': True,
'price': 135,
'product_key': 's3:product:S00014739',
'recommends': [],
'store_price': 199,
'title': u'\u6cf0\u570b ISME~\u7da0\u8336\u814b\u4e0b\u5ae9\u767d\u4e73(15g) - \u5c0f\u4e09\u7f8e\u65e5 | \u7f8e\u599d\u3001\u4fdd\u990a\u3001\u751f\u6d3b\u8cfc\u7269\u7db2'}
這樣我們就可以在本機觀看目前爬蟲的狀況了!!!!