Contents
  1. 1. 環境建置
    1. 1.1. 安裝 pyenv
    2. 1.2. 設定環境變數
    3. 1.3. 安裝/設定 global python intepreter
    4. 1.4. 利用 virtual environment 安裝 python packages
  2. 2. 利用 requests 和 lxml 爬取熱銷品資料
  3. 3. 取得 html
  4. 4. 以 DOM 操作 html data
  5. 5. 取得 top 書單列表

簡單記錄一下這個週末做的小測試,專案連結在此:books_com_tw_crawler

環境建置

利用 pyenv 去建立 virtual environment,可依照不同 OS 去安裝。

安裝 pyenv

1
2
3
4
5
6
# ubuntu (安裝所需 packages)
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev
libsqlite3-dev wget curl llvm

# Mac (直接安裝)
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

設定環境變數

由於我用 oh-my-zsh, 在 plugins 加入 pyenv 並 source ~/.zhsrc 即可。

1
2
3
4
5
6
7
plugins=(
autojump
docker
fzf
osx
pyenv
)

安裝/設定 global python intepreter

1
2
pyenv install 3.6.8
pyenv global 3.6.8

利用 virtual environment 安裝 python packages

1
2
python -m venv .venv
source .venv/bin/activate

以上兩步驟會在 當前目錄下 建立一個 .venv 資料夾,之後用 pip 安裝的套件都會放在裡面。

1
pip  install -r requirements.txt

利用 requests 和 lxml 爬取熱銷品資料

我的目標網頁為博客來書店的 top 100 熱銷書籍資料(https://www.books.com.tw/web/sys_tdrntb/books/),簡單測試一下拿到的 html 格式。

取得 html

1
2
3
import requests
resp = requests.get('https://www.books.com.tw/web/sys_tdrntb/books/')
print(resp.content)

會發現拿到的是 byte string, something likes

1
2
3
e4\xbc\x81\xe6\xa5\xad</span></li>\n<li class="logo_1"><span
title="SSL\xe6\x86\x91\xe8\xad\x89\xe6\x9c\x8d\xe5\x8b\x99">SSL\xe6\x86\x91\xe8\xad\x89\xe6\x9c\x8d\xe5\x8b\x99</span></li>\n<li
class="logo_2"><span

用 str.decode 成 utf-8 即可。

以 DOM 操作 html data

利用 lxml.html 將 html 轉成 etree 的樹狀結構,方便我們定位和取得各個節點的資料。

1
2
import lxml.html
root_etree = lxml.html.fromstring(resp.content.decode('utf-8'))

取得 top 書單列表

現在 root_etree 是代表整張網頁的樹狀結構。我們可以用 chrome dev tool 定位出每本暢銷書 link 的 xpath 並取得 url。以下 code snippet 會回傳一個 list of etree element。

1
2
books_url_list = root_etree.xpath('/html/body/div[4]/div/div[3]/div[1]/ul/li')
print(len(books_url_list)) # 100
Contents
  1. 1. 環境建置
    1. 1.1. 安裝 pyenv
    2. 1.2. 設定環境變數
    3. 1.3. 安裝/設定 global python intepreter
    4. 1.4. 利用 virtual environment 安裝 python packages
  2. 2. 利用 requests 和 lxml 爬取熱銷品資料
  3. 3. 取得 html
  4. 4. 以 DOM 操作 html data
  5. 5. 取得 top 書單列表