作者bckkt (bckkt)
看板Python
標題[問題] python爬蟲,設定driver很慢
時間Thu Feb 22 16:39:35 2018
原本使用requests.get抓網頁原始碼,但是抓不完整
後來使用PhantomJS花了7~8秒抓到了完整的原始碼
不過彈出
Selenium support for PhantomJS has been deprecated, please use headless
所以最後用chrome並使用headless模式
1 from selenium import webdriver
2 from selenium.webdriver.chrome.options import Options
3 chrome_options = Options()
4 chrome_options.add_argument('--headless')
5 driver = webdriver.Chrome(chrome_options=chrome_options)
6 driver.get("
http://goo.gl/iuh5tS")
成功抓到更深的內容,但是執行第5行很慢很慢
大概要花7秒(用PhantomJS設定driver也是7~8秒)
不知有沒有什麼方法能夠快一點,謝謝各位大大
想說用另一個想法試試,打開CHROME的開發者工具,看一下Network底下的XHR
發現
https://imgur.com/CVoIpjB
約略每3秒會彈出一個請求,查了一下
1.AJAX的一種常見用法是使用AJAX載入JSON資料,然後在瀏覽器端渲染。如果能直接抓取
到JSON數據,會比HTML更容易解析。
2.XMLHttpRequest 縮寫為 XHR
3.Type為xhr,這就是一個Ajax 請求
4.其中Request Headers 中有一個信息為X-Requested-With:XMLHttpRequest,這就標記了
此請求是Ajax請求。
5.發現這是一個POST類型的請求,請求連結是
GetGameData.ashx?r=1519301370235,也看到了json格式的資料
參數為r,r一直變動,查了一下,r的產生是new Date().getTime()
直接對這些連結opon in new tab打開都空白
目前死在這邊,如果r有規律的話就輕鬆了,直接打開頁面都是空白,json什麼的都沒有
不知道開發者工具是怎麼偵測這些r的...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.187.76
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1519288777.A.104.html
※ 編輯: bckkt (114.37.187.76), 02/22/2018 21:27:20
※ 編輯: bckkt (114.37.187.76), 02/22/2018 21:47:27
※ 編輯: bckkt (114.37.187.76), 02/22/2018 21:51:38
推 s860134: 自己發 ajax 不合你的需要嗎 02/23 18:59
→ bckkt: 後來發現用第一個方法 速度上就是硬傷 02/23 19:25
→ bckkt: 研究才發現一直彈出的頁面是Ajax請求 02/23 19:25
→ bckkt: 所以想說從這條切入研究,但也沒那麼簡單,還在研究中就是了 02/23 19:26
→ s860134: 但是你都知道是要多個時間參數,你自己生當錢時間就好了? 02/24 18:22
→ Kazimir: 你用 time.time()的那個毫秒數拿去post可以嗎? 02/24 18:34
→ bckkt: 謝謝回應,我沒試過但覺得不行,我生的時間跟他生的時間 02/24 21:41
→ bckkt: 應該是不一樣的時間 02/24 21:41
→ bckkt: form data還有個變數gidGroup,這變數也是變動很大的 02/24 21:43
→ bckkt: 今天改用按鍵精靈去抓json,想說丟到某處之後,再分解json 02/24 21:44
→ bckkt: 分解好的資料,再看是要丟到EXCEL,還是怎樣呈現的,再看看 02/24 21:46
推 Kazimir: 不是 我有去試JS那個func 是1970到現在的毫秒數 02/24 21:59
推 Kazimir: 所以python這個產出來應該是一樣的東西才對 02/24 22:01
→ bckkt: 我試試 02/24 22:02
→ bckkt: 加上header來請求,網頁是空白 02/24 22:26
→ bckkt: 我來研究一下form data的gidGroup是怎麼產生的好了 02/24 22:26
→ bckkt: 下次連form data一起丟 02/24 22:27
→ bckkt: 直接複製最近一個gidGroup,連著其他data一起丟,出現了!! 02/24 22:36
→ bckkt: 但不知道gidGroup怎麼產生的,等這個變數搞懂,就可以爬了 02/24 22:37
→ bckkt: 我發現不用丟gidGroup,json也會出現耶,太神奇了 02/24 22:41
→ bckkt: 謝謝你們提醒我試試直接取得時間直接post 02/24 22:43