推 Thisisnotptt: 剛剛試了一下,應該是JS的問題,所以我改用selenium 04/11 13:38
但同樣的code 執行好多次才能成功一次 是我的電腦業障重嗎OAQQ
其餘的失敗也沒什麼訊息 就是只抓回空殼 (我猜應該是沒有成功執行js?)
我目前要做的 是已經有一堆pchome網址 想要從網址爬回對應商品
發現雖然head裡的meta就有了 但也不知道該如何簡單的只抓回這個部分
所以總結想請問各位前輩:
1.沒辦法每次都抓回網頁,是pchome的防範機制嗎?該何解QQ
2.還是說有更簡單的方法可以只抓回head那個部分,覺得抓回整個網站有點overkilled
但現在就連硬要抓整個網站回來都做不到...( ̄▽ ̄#)﹏﹏
感謝各位前輩指點迷津OTZ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.153.225
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1470414533.A.802.html
推 ripple0129: 其實就很單純的觀察封包偽裝成瀏覽器送封包到server 08/06 05:00
pchome 這裡似乎沒有防 如果要爬露天可能就要偽裝一下
推 Thisisnotptt: 假如是偶爾成功 那可能是要加入延遲讓網頁跑完 08/06 20:46
→ Thisisnotptt: 讓javascript的內容被載入之後才抓得到 因為se是個 08/06 20:47
→ Thisisnotptt: 瀏覽器 要給他點時間處理 08/06 20:47
→ Thisisnotptt: 載入之後再進行抓取 08/06 20:49
→ Thisisnotptt: 假如要擺脫 se 可以用post request的方式直接抓取 08/06 20:50
→ Thisisnotptt: 內容 但是我之前對pchome採post/request的方式都一 08/06 20:51
推 Thisisnotptt: 不太成功 se 搞起來比較方便就是了 缺點就是慢跟肥 08/06 20:53
推 Thisisnotptt: 剛剛試了一下 request 的方式 OK了 不曉得之前是什 08/06 22:06
→ Thisisnotptt: 麼問題卡住 總之應該還行 一樣要加點delay會比較穩 08/06 22:07
非常感謝這不是ptt大,也把解決步驟描述一下供後人參考:
測試幾次後發現 的確是時間的問題 初步嘗試加入time.sleep()後能解決
但更好的解決方法似乎是wait.until():
http://selenium-python.readthedocs.io/waits.html#explicit-waits
在這裡我設定的是 等到#PriceTotal載入為止 因為原本的框架沒有這東西,如:
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#PriceTotal")))
至於直接request的部分 因為已經寫好selenium了 之後改版再來研究看看好了A_A
※ 編輯: BigBank (36.231.153.225), 08/07/2016 01:31:04