不用程式設計,用一行命令就能抓取網站資訊
很多時候我們想要拿一些網站的資訊做分析,而有用的資訊經常是要登入後才能看到的。而且為了防爬蟲,很多網站加了千奇百怪的驗證碼,這個就卡住了太多人。難道真的要學AI學程式設計才能拿到資料嗎?
其實很早以前網頁沒那麼複雜的時候,就有一些基於命令列的瀏覽器比如w3m,我們稍做定製就可以只看我們想的資料。但現在很多網站都改成用javascript 框架來實現了,我們就拿不到靜態生成的html了。可網站上的資料從哪兒來呢,往往是一個json檔案,然後再用javascript 渲染成頁面。我們只要找到json檔案,就可以拿到所有資料了。
首先開啟Chrome, 登入你想進的網站,右鍵選“檢查”,就會開啟開發者工具,點Network選項卡

image.png
我們可以看到有很多項在下方,這些代表這個網頁所有的HTTP請求,我們挨著點選後,選response, 直到發現類似json的資料, 這就代表網頁從伺服器端取回了一個json

image.png
我們再點Headers選項卡,找到Cookie: 全選後面那個長長的字串選複製。再找到Request URL也存在某個文字檔案裡

image.png

image.png
這時我們就需要一個Linux主機了,windows10的使用者可以安裝wsl, 其它版本的則需要Cygwin或者一個虛擬機器。 有安卓的同學可以裝termux (我在以前的文章寫過), 然後執行apt install jq curl 這兩個是我們需要的工具
首先我們執行
curl -o test.json --cookie <cookie> "<url>"
三角括號裡就是上面步驟中我們存好的兩項,貼上過來,執行後就會拿到test.json 檔案
然後執行
jq '.' test.json
就會以良好的格式顯示json的內容,我們可以修改上面的命令只取我們需要的資料 比如json類似這樣的結構
{"data": {"list":[{"a":"b"},{"a":"c"}]}} 這樣的,我們就可以用'.data.list[]" 取出所有list下面的資料
我們還可以寫成一行語句實現功能,但要加個引數s,保證curl 不顯示進度條
curl -s --cookie <cookie> "<url>" | jq '.data.list'