【问题标题】:JSOUP Scraping JavaScript piece JavaJSOUP 抓取 JavaScript 片段 Java
【发布时间】:2015-02-02 10:03:37
【问题描述】:

我正在使用 Jsoup 来抓取一些数据。 在我的文档中,我有类似的内容:

  <script type="text/javascript">
ta.store('mapsv2.geoName', 'Marseille');
ta.store('mapsv2.map_addressnotfound', 'Address not found');         ta.store('mapsv2.map_addressnotfound3', 'We couldn\'t find that location near {0}.  Please try another search.');       </script> 
  <script type="text/javascript">
window.mapDivId = 'map0Div';
window.map0Div = {
lat: 43.295246,
lng: 5.364188,
zoom: null,
locId: 5039388,
geoId: 187253,

我的代码:

   Document attractionDoc = Jsoup.connect(url).timeout(100000).get();
   System.out.println("attractionDoc "+attractionDoc.toString());

但我不知道如何捕捉 lat:lng:

之后的数字

感谢您的帮助!

【问题讨论】:

  • 我相信你必须为此编写一个正则表达式。例如检索脚本标签的文本内容,检查内容是否包含单词“lat”和“lng”,然后通过正则表达式将它们解析出来。我会自己写一个答案,但不幸的是我对正则表达式不太满意。

标签: java javascript web-scraping jsoup scraper


【解决方案1】:

JSoup 不解析嵌入的 Javascript,因此没有简单的方法从 window.map0Div 对象中获取对象成员 latlng

但正如@Ceiling Gecko 所指出的,您可以使用其他技术解析脚本标签的内容,例如正则表达式。

假设您将脚本内容作为一个名为 content 的字符串,您可能会使用如下内容:

Pattern p = Pattern.compile("window.map0Div\\s*=\\s*\\{.*lat:\\s*([0-9.]+),.*lng:\\s*([0-9.]+),");
Matcher m = p.matcher(content);
if (m.find()){
    String lat = m.group(1);
    String lng = m.group(2);
    //do whatever you need to do with the info
}

这里是一个正则表达式:http://fiddle.re/1p0yd6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多