1. 概述
- 好久沒有寫博客了, 最近看了些東西, 但是不知道怎么輸出
- 簡單寫點東西吧
2. 場景
- 最近發現一個網站, 時不時會更新電子書, 書還很好
- 網站有一個 排行榜, 會把近期更新的電子書, 都列出來
- 我之前的思路, 是隔兩天掃一輪
- 現在網站轉變了思路
- 更新應該是每天來的
- 但是排行榜並不每天更新
- 排行榜最開始有 100 個內容, 現在只有 20 個
- 結果
- 不定期更新, 導致每次更新內容可能會很多
- 如果多於 20 個, 可能會導致我丟內容
- 我的目的
- 能夠不漏地獲取到網站更新的電子書
3. 思路
- 電子書的更新 url, 是有規律的, 里面的變量, 是一個 int
- 這個可以通過 循環 來幫助生成
- 因為不熟悉 爬蟲, 所以只有使用 shell 來做
- curl 是個選擇
- 獲取的頁面內容, 可以通過 grep 來過濾標題, 查看到底是什么書
4. 環境
- 操作系統
- windows 10
- shell
- git bash
- 建議
- 有條件最好用 linux
5. 問題
-
概述
- 執行中遇到了些小問題
-
思路
- 思路是先做單體, 再做循環
- 先使用 curl 來做
- 然后用 grep
- 最后 循環, 輸出到文本文件
- 思路是先做單體, 再做循環
-
問題
-
curl 亂碼
- curl 下來的東西, 中文部分是亂碼
-
嘗試解決
-
調整 git bash 的編碼
- 想法
- 可能是 curl 的結果, 和 git bash 的編碼不一致
- 嘗試調整成 gb2312 看看
- 結果
- curl 的東西可以看了
- 但是 文件系統 里, 之前正常顯示的內容亂碼了
- 結論
- curl 內容是 gb2312 的編碼
- 本地文件系統, 是 utf8 的編碼
- 兩種編碼不一致, 所以亂碼了
- 這種調整 gitbash charset 的思路, 不可用
- 想法
-
改變 curl 內容的編碼
-
想法
- 不是 git bash 亂碼
- 是 curl 內容亂碼
- 如何改變 curl 結果的編碼
-
確認編碼
- 思路
- 是的, 之前的編碼是猜的
- 但是, 編碼是可以確認的
- 正確的思路, 是應該先確認
- shell 代碼
> curl <url> | grep -E 'charset' <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- 思路
-
轉換
- 使用 iconv 工具
-
概述
- 一個轉碼的工具
- 簡單使用, 不做詳細介紹了
-
使用
-
命令
# 1. 查看支持字符集 > iconv -l # 2. 轉換字符集 ## 1. 默認輸出到屏幕 ## 2. -t 默認好像是 utf8 > iconv -f <fromEncode> -t <toEncode> <file> # 3. 支持管道 > curl <url> | iconv -f gb2312
-
-
- 使用 iconv 工具
-
-
-
5. 后續
- 后續就是過濾內容, 生成列表
- 這塊也不難, 我就不講了
6. 問題
- 思路的本質
- 感覺本質上, 這是個爬蟲
- 如果會 爬蟲, 工作會不會輕松很多
- 安全機制
- 我如果每天掃那個網站, 會不會觸發安全機制
- curl 和 grep
- 好久不用, 感覺有點生疏
- 我過濾的內容, 最后都是帶 html 標簽的
- 據說這些工具, 可以去掉標簽
- grep
- sed
- 只有下來研究了
- 據說這些工具, 可以去掉標簽
7. ref
-
一個問題
- 問題: 在 git for windows 下, 使用 java 會有奇怪的問題
-
環境
- windows
- java
- 輸出編碼是 gbk
- git for windows
- 輸出編碼是 utf-8
-
操作
- 輸入命令
java -h
有 亂碼 - 將 git 的編碼調整為 gbk, 輸出 命令輸出 沒有亂碼
- 將 git 的編碼調整為 utf-8, 使用
java -h|iconv -f gbk
依然亂碼
- 輸入命令
-
疑問
- 為什么 iconv 可以處理 curl 傳來的信息, 卻處理不了 java 的
- 是因為兩者 輸出的結果, 本身就不是同一類東西嗎
- 知道的高手走過路過, 麻煩留個言
-
- 問題: 在 git for windows 下, 使用 java 會有奇怪的問題