首頁  >  問答  >  主體

Python如何利用Selenium或PhantomJS爬取動態網頁內容

想用python做股票量化交易,第一步就是取得股票的歷史數據。造訪http://data.eastmoney.com/sto...網頁,將網頁原始碼開啟後看不見表格中的數據,據說是利用ajax技術載入的。在網路上看到可以利用selenium和phantomJS來取得這些動態網頁內容,但卻不知道如何取得完整原始碼。請高手指點迷津

黄舟黄舟2681 天前935

全部回覆(3)我來回復

  • 我想大声告诉你

    我想大声告诉你2017-05-18 11:03:14

    事實上,我剛剛試了一下,頁面不是用xhr加載的,在頁面的源代碼中已經有了,然後調用了一個類把數據加載為一個table。
    比如,首頁的數據:

    然後,提取就直接使用re提取就可以了,得到文本以後json解析就好了。
    先寫到這裡。
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    然後,就是這個網站不使用xhr載入數據而是使用的js來載入json數據,動態解析來顯示。具體分析需要用到js的知識,如果你了解也可以自己嘗試解析。

    我嘗試了一下。

    
    from urllib.parse import quote
    import time
    import requests
    
    url = "http://datainterface.eastmoney.com/EM_DataCenter/JS.aspx?type=FD&sty=TSTC&st={sortType}\
    &sr={sortRule}&p={page}&ps={pageSize}&js=var {jsname}=(x){param}"
    
    params = {
        "sortType": 1,
        "sortRule": 1,
        "page": 2,
        "pageSize": 50,
        "jsname": "Aafdafgq", # 这里使用的是随机字符串,8位
        "param": "&mkt=0&rt="
    }
    params["param"] += str(int(time.time()/30)) # 当前时间
    url = url.format(**params)
    
    url = quote(url, safe=":=/?&()")
    req = requests.get(url)
    
    req.text

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-18 11:03:14

    用這個組合 好處是簡單暴力,壞處是效率較低。
    相當於打開一個你看不到的瀏覽器載入頁面,再把運算好的結果讀取。
    新進蟲的話 推薦 python網路資料收集 這本動物書。
    你需要的說明在採集動態頁面那章。
    這書很薄 很實用。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-18 11:03:14

    我對js和json都不太了解,剛剛爬蟲入門。經過你的提示,我再查看了一下原始碼,發現在defjson裡面有這些數據,不明白是怎麼把json裡的數據顯示到tbody裡面的。我用pandas的read_html可以抓到這些數據,但是最後兩列會遺失。看來我得先去看看js和json

    回覆
    0
  • 取消回覆