2024-10-01 07:46:34 发布
网友
我想知道是否可以用Scrapy从类似于以下代码的代码中提取JavaScript函数的参数:
<script type="text/javascript"> var map; function initialize() { var fenway = new google.maps.LatLng(43.2640611,2.9388228); }; } </script>
我想提取坐标43.2640611和{}。在
43.2640611
这就是^{}方法可以帮助的地方。在
其思想是通过xpath()定位script标记,并使用re()从script标签的内容中提取{}和{}。来自^{}的演示:
xpath()
script
re()
$ 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包含:
index.html
当然,在您的例子中,xpath不只是//script。
//script
仅供参考,new google\.maps\.LatLng\(([0-9.]+),([0-9.]+)\);正则表达式使用saving groups([0-9.]+)来提取坐标值。在
new google\.maps\.LatLng\(([0-9.]+),([0-9.]+)\);
([0-9.]+)
另请参见Using selectors with regular expressions。在
免责声明:我没有尝试过这种方法,但是如果我被限制使用Scrapy,不想像alecxe上面建议的那样解析JavaScript,我会怎么想。这是一个挑剔的,脆弱的黑客:-)
您可以尝试使用scrapyjs从你的垃圾爬虫程序执行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 } };
总的来说,这种方法听起来有点痛苦,但尝试起来可能很有趣。在
这就是^{} 方法可以帮助的地方。在
其思想是通过}和{}。来自^{} 的演示:
xpath()
定位script
标记,并使用re()
从script
标签的内容中提取{其中
^{pr2}$index.html
包含:当然,在您的例子中,xpath不只是
//script
。仅供参考,
new google\.maps\.LatLng\(([0-9.]+),([0-9.]+)\);
正则表达式使用saving groups([0-9.]+)
来提取坐标值。在另请参见Using selectors with regular expressions。在
免责声明:我没有尝试过这种方法,但是如果我被限制使用Scrapy,不想像alecxe上面建议的那样解析JavaScript,我会怎么想。这是一个挑剔的,脆弱的黑客:-)
您可以尝试使用scrapyjs从你的垃圾爬虫程序执行JavaScript代码。为了捕获这些参数,您需要执行以下操作:
关于第2步的更多内容:使您的伪LatLng函数修改HTML页面以公开lat和lng变量,以便您可以用Scrapy解析它们。下面是一些粗略的代码来说明:
总的来说,这种方法听起来有点痛苦,但尝试起来可能很有趣。在
相关问题 更多 >
编程相关推荐