作者lovdkkkk (dk)
標題Re: 請益Request爬蟲
時間2023-01-27 22:00:38
追了一天動漫來回點東西,
轉生公主天才千金好香,槍神畫面好屌
遇到問題時除了試著使用其它工具或做法,
還能做的 - 或許也是應該先做的 - 是瞭解問題。
或許你是後端工程師,對前端不熟,那看看你們公司有沒有前端工程師可以問,
不然試著到前端社群上請益看看。
要爬
https://www.hktvmall.com/hktv/zh 這樣一個網站需要注意什麼?
怎麼爬比較快?
或許有人看了看可以提供一些回饋,
例如有防 csrf 機制,token 就寫在頁面上一個隱藏的 input 裡,
https://en.wikipedia.org/wiki/Cross-site_request_forgery
會直接跟頁面 html 一起吐回來
後端用的應該是 JAVA,所以 cookie 有個 JSESSIONID,
不過因為它的設定是 http only 無法以 JS 取得
另外本身就神慢,不論是頁面或 API 經常需要 10~30 秒
瞭解了問題之後,或許解法就不會是改用 Selenium 之外的工具,
而是使用 Selenium 但調整做法。
因為就算換了工具慢還是慢在網站本身
例如,一樣先用 Selenium 連到該頁面,
但是不再用操作頁面連結的方式做,而是設法取得 CSRF token 組參數打 api,
使用 execute_script 應該就能在第一次頁面載入後由 input 元素取得 CSRF token,
再使用 execute_async_script 打 api 取得資料
Ref :
https://stackoverflow.com/q/28057338/1042731
而由於是實際跑在瀏覽器,可以正確的帶上 JSESSION ID,
並且瀏覽器本身的同 domain request 數量限制會自動避免你變成 DDOS
(印像中是 4 或 8,不確定現在有沒有改變)
而像以下是一個可以跑的 api 示例,我沒怎麼研究,
只是直接拿開發者工具裡看到的參數來用
https://pastebin.com/ANgNVxqF
說回為什麼 "瞭解問題" 重要,
弄清楚問題是什麼再對症下藥,比較不會花大量時間做無用功,
當問題解決時也比較清楚問題究竟是什麼,為什麼能解決,
才能真的吸收並得到經驗
有時候不一定要急著趕工,
稍微停下來,多查一查想想看,反而可能更快更有收獲
※ 引述《andy22543 (andy22543)》之銘言:
: 最近接到一個專案要爬購物網站存mySQL
: 爬分類裡面各產品資訊+內頁詳細資訊
: 目前已經使用selenium+multithreading寫完
: 可惜速度不夠快
: 所以正改用request改寫
: 但發現不管用什麼方法(session、cookie、payload)都沒辦法取得首頁的商品資訊
: 已經把網路上能看的解決方式都看過一遍還是無解
: 另外也試過network的event(貌似是api?
: 把相關資訊post上去爆出ConnectionError: ('Connection aborted.'
: 所有能試解法都試過還是無法
: 有沒有精通的高手幫看一下還有甚麼辦法呢
: 附上連結
: https://www.hktvmall.com/hktv/zh/%E8%B6%85%E7%B4%9A%E5%B7%BF%E5%A0%B4/%E8%B6%85%E7%B4%9A%E5%B8%82%E5%A0%B4/%E5%86%B7%E5%87%8D-%E6%80%A5%E5%87%8D%E9%A3%9F%E5%93%81/main/search?page=0&q=%3Arelevance%3Astreet%3Amain%3Acategory%3AAA11110000000
: -----
: Sent from JPTT on my iPhone
--
※ 發信站: 批踢踢實業坊(ptt-web.org.tw), 來自: 114.37.169.144 (臺灣)
※ 文章網址: https://ptt-web.org.tw/Soft_Job/M.1674828041.A.5EB
※ 編輯: lovdkkkk (114.37.169.144 臺灣), 01/28/2023 00:47:48
推 kimi112136: 大眼鏡的威席不是熟悉的威席QQ 01/28 11:42