2016-07-06 105 views
0

我正在編寫一個python應用程序,它從我製作的web應用程序中刪除傳感器數據。我想使用lxml從HTML中收集某些跨度元素,這些元素會使用JQuery腳本定期更新。看起來好像lxml不會獲取使用JQuery更新的文本,因爲我只檢索原始HTML加載的空字符串。 JQuery的值在查看網頁時反映出來,而不是在網頁抓取工具上。我如何始終檢索使用JQuery進行更新的數據?如何刮取使用JQuery加載的特定HTML span元素

HTML

  <!--Blower Speed Well --> 
      <div class = "col-xs-4"> 
       <div class = "well" id="bspeed_well"> 
        <span class = "tex" id="bspeed_text">Blower Speed: </span> 
        <span class = "val" id="bspeed_data"></span> 
       </div> 
      </div> 

JQuery的更新HTML元素

//Gather Data from main.xml and store into variables 
$.ajax({ 
    type: "GET", 
    url: "static/main.xml", 
    //dataType: "xml", 
    async: false, 
    cache: false, 
    success: function(xml){ 
     $(xml).find('item').each(function(){ 
      var id = $(this).find('id').text(); 
      switch(id){ 
        case "blower_speed": 
        bspeed = $(this).find('value').text(); 
        break; 
     } 
}); 
$("#bspeed_data").text(bspeed); 

的Python LXML查詢

page = requests.get('http://192.168.1.72:5000') 
tree = html.fromstring(page.content) 
blower_speed = tree.xpath('//span[@id="bspeed_data"]/text()') 
print "Blower Speed: ", blower_speed 

結果

鼓風機速度:[]

+0

「bspeed」值來自哪裏? jquery是否發出一個單獨的請求來獲取值? – alecxe

+0

是的。 JQuery發出ajax請求來從XML文檔中獲取值。 –

回答

1

JQuery發出ajax請求以從XML文檔獲取值。

您需要模擬是AJAX請求與requests。您可以手動執行此操作,也可以將請求複製爲cURL(從瀏覽器開發人員工具 - >網絡選項卡)並使用此cURL-to-requests conversion utility自動生成請求代碼。

然後,您可以使用lxml.etree解析XML響應並提取bspeed值。

+0

我在開發人員工具的「網絡選項卡」上,但由於我對cURL沒有興趣,所以我對在哪裏找到這個請求感到困惑。它看起來像這樣?... 請求URL:http://192.168.1.72:5000 /靜態/ main.xml?_ = 1467816070831 –

+0

@NickSchrock應該是這樣的。對不起,我無法重現它,不能再具體了。 – alecxe

相關問題