iT邦幫忙

0

請教Python爬蟲程式,處理 ajax 取值的疑問。

  • 分享至 

  • xImage

各位前輩好,首次在iT邦發文,希望可以獲得iT邦的神之力。

連結: 玩股網法人買賣超排行

問題: 小弟,目前在做大數據分析,以Python程式解析網頁中含有Javascript的動態網頁原始碼,我找過許多網站,這個網站的資訊比較完整且好用,首次就拿玩股網的買賣超排行開刀。

由於連結的網頁原始碼是JS程式,就直接跳過原始碼的部分,來開發人員模式(F12),[網路]-[Ctrl+R] 先重新讀取網頁資料,找到網頁中的XHR請求,從請求名稱可以找到與之相關的名稱,如圖所示!https://ithelp.ithome.com.tw/upload/images/20230513/20153268uTg0amblcf.png
https://ithelp.ithome.com.tw/upload/images/20230513/20153268GqE0A0shz2.png

從右邊得連結要求網址,可以獲取json格式的原始碼,如下圖
https://ithelp.ithome.com.tw/upload/images/20230513/201532683GWSXHYXZs.png
但網站似乎有限制timeout,一段時間後就會回傳 400-BadRequest 的錯誤,請教要做這個網頁的爬蟲程式碼要如何做才可以做到以下這種效果。
1.將爬蟲tmp_url設為 玩股網法人買賣超排行
2.將每次執行tmp_url 自動取得上方xhr網址,再利用request了將html原碼加以做解析。

解析的部分我可以自己解決,唯獨上方產生的xhr url 是ajax動態產生的,故還需要再向伺服端請求一次,才會取得json檔案,這邊我就不熟悉了。

是否需要使用到 selenium 才可以實作這樣的程式呢?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
echochio
iT邦高手 1 級 ‧ 2023-05-14 10:42:16

看你要選 selenium 或 request
selenium 比較間單
https://ithelp.ithome.com.tw/upload/images/20230514/20110611jqZTQxkyel.png

看選到
class="rt stress-red-5" 就有red 那些資料
class="rt stress-green-5" 就有 green 那些資料
這如果網頁變了改程式幅度也比較小

當然拆解 xhr網址 去取資料也可
這比較麻煩, 如果api變了就又要改程式更改的幅度比較大

回應echochio:
話說selenium可能比較簡單,但我試圖使用webdriver.Chrome去瀏覽網址,得到結果如下圖,是不是沒有接到js的資料?https://ithelp.ithome.com.tw/upload/images/20230514/20153268ljxy75Xv7L.png

是這樣沒錯, 但網站的api不會說改就改, 也不曉得怎樣才可以取的網頁的所有xhr網址

echochio iT邦高手 1 級 ‧ 2023-06-11 11:51:35 檢舉

出國在忙現在才看到那網址有防爬
換 Headers User-Agent Headless 正常都可抓到
可找找
https://www.learncodewithmike.com/2020/09/7-tips-to-avoid-getting-blocked-while-scraping.html

Honeypot Traps 比較難防

我要發表回答

立即登入回答