获取Scrapy中JavaScript函数的参数

2024-10-01 07:46:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以用Scrapy从类似于以下代码的代码中提取JavaScript函数的参数:

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

我想提取坐标43.2640611和{}。在


Tags: 函数代码textmapnew参数vartype
2条回答

这就是^{}方法可以帮助的地方。在

其思想是通过xpath()定位script标记,并使用re()script标签的内容中提取{}和{}。来自^{}的演示:

$ 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包含:

^{pr2}$

当然,在您的例子中,xpath不只是//script

仅供参考,new google\.maps\.LatLng\(([0-9.]+),([0-9.]+)\);正则表达式使用saving groups([0-9.]+)来提取坐标值。在

另请参见Using selectors with regular expressions。在

免责声明:我没有尝试过这种方法,但是如果我被限制使用Scrapy,不想像alecxe上面建议的那样解析JavaScript,我会怎么想。这是一个挑剔的,脆弱的黑客:-)

您可以尝试使用scrapyjs从你的垃圾爬虫程序执行JavaScript代码。为了捕获这些参数,您需要执行以下操作:

  1. 加载原始页面并将其保存到磁盘。在
  2. 修改要替换的页面谷歌地图.LatLng使用您自己的功能(见下文)。确保在加载googlejs之后运行脚本。在
  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
  }
};

总的来说,这种方法听起来有点痛苦,但尝试起来可能很有趣。在

相关问题 更多 >