簡體   English   中英

使用Scrapy獲取JavaScript函數的參數

[英]Get the parameters of a JavaScript function with Scrapy

我想知道是否可以使用類似於此代碼的代碼從Scrapy中提取JavaScript函數的參數:

<script type="text/javascript">
    var map;
  function initialize() {
    var fenway = new google.maps.LatLng(43.2640611,2.9388228);
  };
}
</script>

我想提取坐標43.26406112.9388228

這是re()方法有用的地方。

想法是通過xpath()定位script標記,並使用re()script標記的內容中提取latlng 來自scrapy shell演示:

$ scrapy shell index.html
>>> response.xpath('//script').re(r'new google\.maps\.LatLng\(([0-9.]+),([0-9.]+)\);')
[u'43.2640611', u'2.9388228']

其中index.html包含:

<script type="text/javascript">
    var map;
  function initialize() {
    var fenway = new google.maps.LatLng(43.2640611,2.9388228);
  };
}
</script>

當然,在你的情況下,xpath不僅僅是//script

僅供參考, new google\\.maps\\.LatLng\\(([0-9.]+),([0-9.]+)\\); 正則表達式使用保存組 ([0-9.]+)來提取坐標值。

另請參閱使用具有正則表達式的選擇器

免責聲明:我沒有嘗試過這種方法,但如果我被限制使用Scrapy並且不想按照alecxe建議的方式解析JavaScript,我會考慮如何。 這是一個挑剔,脆弱的黑客:-)

您可以嘗試使用scrapyjs從scrapy搜尋器中執行JavaScript代碼。 要捕獲這些參數,您需要執行以下操作:

  1. 加載原始頁面並將其保存到磁盤。
  2. 修改頁面以將google.maps.LatLng函數替換為您自己的(見下文)。 確保在加載谷歌js后運行你的腳本。
  3. 使用scrapyjs(或由其創建的webkit實例)加載修改后的頁面
  4. 解析頁面,查找由假LatLng函數創建的兩個特殊div,其中包含提取的lat和lng變量。

有關步驟2的更多信息:使您的假LatLng函數修改HTML頁面以顯示lat和lng變量,以便您可以使用Scrapy解析它們。 這里有一些粗略的代碼來說明:

var LatLng = function LatLng(lat, lng) {
  var latDiv = document.createElement("div");
  latDiv.id = "extractedLat";
  latDiv.innerHtml = lat;
  document.body.appendChild(latDiv);

  var lngDiv = document.createElement("div");
  lngDiv.id = "extractedLng";
  lngDiv.innerHtml = lng;
  document.body.appendChild(lngDiv);
}

google = {
  map: {
    LatLng: LatLng
  }
};

總的來說,這種方法聽起來有點痛苦,但嘗試起來會很有趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM