[英]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.2640611
和2.9388228
。
這是re()
方法有用的地方。
想法是通過xpath()
定位script
標記,並使用re()
從script
標記的內容中提取lat
和lng
。 來自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代碼。 要捕獲這些參數,您需要執行以下操作:
有關步驟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.