# 來點自己的小工具吧(我大爬蟲篇) > Request/Selenium > Fan Kang Ting --- ### 還記得Axios? [自家講義](https://hackmd.io/@fan9704/rkIdAlbFY) ```javascript= let url="..." let config={ user:"Little fish周咏陞" spydog:true } this.axios.post(url,config) .then((res)=>console.log(res.data)) .catch((error)=>console.log(error)) ``` ---- ### 當然Axios適用於JavaScript上黑 那同樣今天要用的請求工具適用在Python上(Request/Selenium) ---- 補充:事實上在使用JSON格式的資料時要先解析/字串化=> - 解析 JSON.parser(JSON本人) - 字串化 JSON.stringfy(JSON本人) 你是不是想說之前在實作的時候明明都不需要用到他阿 我看都沒看過 不!!! ---- 那是因為AXIOS這個Module 的資料會自動轉換 方便多了 --- ### 建立觀念 [參考資料 關於httprequest](https://yakimhsu.com/project/project_w4_Network_http.html) ![](https://i.imgur.com/UQekf0v.png) 簡單來說你從瀏覽器看到網頁是需要使用GET Request才能看到的 ---- ##### 認識一下常見的Http Method 比如我們常在建立資料Router時常見的CRUD 分別代表POST,GET,PUT,DELETE ![](https://i.imgur.com/BQNvynF.png) [各種http method](https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Methods) 其中POST(新增)跟PUT(修改)是可以夾帶參數的 通常我們會把參數寫成JSON config ---- ###### 備註UPDATE CRUD的U(update) 可以是PUT或是PATCH 通常意義上 PUT是指大範圍的UPDATE(比如整組資料修改) PATCH指小範圍的UPDATE(比如修改某個欄位修改) --- ### 你可能會覺得? 為甚麼不都用POST就好 因為在Web Service後端設計上,通常我們要操作Model(資料模型)的使用方法會寫在同一個Class(類別)上 ---- ##### 假如都使用POST去來進行UPDATE會發生甚麼事情呢? 1. 你必須建立另一個Class 2. 建立額外的路由(Controller/Router) 3. 程式碼不簡潔(忌諱) 4. API代理問題 5. 還有很多問題 這裡就不多說 --- ### Http status code >蝦 沒聽過?! >不可能 至少你有看過 ---- ##### 範例 Google掛掉的時候 你就會看到了 ![](https://i.imgur.com/t5x3Ltw.png) 黑對 404(No Found)就是其中之一 ---- ##### Staus Code概欄 ![](https://i.imgur.com/mCJgRLe.png) ---- ##### 常見 statuscode ![](https://i.imgur.com/qMI0zNU.png) --- ### 額外介紹 Postman 後端測試的好捧由 [Link](https://www.postman.com/) ---- ### 了解了嗎? 正題開始 --- ### 安裝Requests 與Selenium 這裡順便提一下pipenv ```bash= pip3 install pipenv #安裝pipenv mkdir request_train #建立專案資料夾 cd requset_train pipenv install #pipenv初始化專案資料夾 pipenv install requests #用pipenv install 即可安裝至Local pipenv install selenium pipenv install webdriver-manager ``` ---- ### 建立main. py 順便提一下我們主程式的進入點 讓你的main.py長這樣 ```python= import requests from selenium import webdriver def main(): pass #程式進入點 if __name__ =="__main__": main() ``` ---- ### 使用基本功能 ```python= import requests from selenium import webdriver from bs4 import BeautifulSoup#注意這個 pipenv install bs4 def main(): url="https://www.ptt.cc/bbs/MobileComm/index.html"#需要操作的網址 r = requests.get(url) #將網頁資料GET下來 soup = BeautifulSoup(r.text,"html.parser") #將網頁資料以html.parser 這裡有使用BeautifulSoup 套件大家也可以安裝看看 雖然我平常不用 sel = soup.select("div.title a") #取HTML標中的 <div class="title"></div> 中的<a>標籤存入sel for s in sel: print(s["href"], s.text) #程式進入點 if __name__ =="__main__": main() ``` ---- ### 算了還是請大家裝一下 bs4好了 ```bash= pipenv install bs4 ``` ---- ### 當然前面的範例只是GET 當然其他方法也適用 假設我使用 需要夾帶參數的POST ```python= payload={ #須送之參數 'from':'/bbs/Gossiping/index.html', 'yes':'yes' } requests.post("https://www.ptt.cc/ask/over18",data=payload) #將參數寫至data ``` ---- ### 阿這有甚麼厲害的嗎 ---- ### 答案 沒有 不過好玩的來了 --- ### Selenium ---- ### 啥東西? 他可以模擬你瀏覽器的一切操作 也就是人家說的爬蟲腳本機器人的重要製作工具之一 ---- ### 使用他前 需要把電腦上的瀏覽器更新到最新(建議) 並且下載Web driver (模擬瀏覽器的引擎) [Chrome Driver引擎載點](https://chromedriver.chromium.org/downloads) 找到你適合得版本 ---- ### 將你的Python File跟Chrome Dirver放在同一目錄下(或者設定路徑) 操作範例 ```python= # !/usr/bin/python # coding:utf-8 from selenium import webdriver from selenium.webdriver.support.ui import Select,WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import requests from bs4 import BeautifulSoup import io import time drivePath="C:\\Users\cxz12\Downloads\chromedriver.exe"#chromedriver path browser=webdriver.Chrome()#open browser for i in range(0,1000): if(i<100): if(i<10): i=("00"+str(i)) else: i=("0"+str(i)) url="http://140.125.95.10/term1102/network/homework/doc/p6.docx"+str(i)+".doc" # url="http://140.125.95.10/term1101/phpdb/practice/doc/p14"+str(i)+".doc" browser.get(url) ``` ---- ### 就這樣而已? 你錯了還可以搞很多東西 就交給各位探索拉
{"metaMigratedAt":"2023-06-16T17:23:43.619Z","metaMigratedFrom":"YAML","title":"來點自己的小工具吧(我大爬蟲篇)","breaks":true,"contributors":"[{\"id\":\"4c8f8799-9dcd-430b-b7bc-8a5156d39d0b\",\"add\":4128,\"del\":72}]"}
    87 views