【问题标题】:Scraping Address & Phone Number & Map抓取地址 & 电话号码 & 地图
【发布时间】:2017-06-26 02:26:49
【问题描述】:

我有以下 HTML

<div class="fiche-detail">
      <div class="ColG">
         <div class="ColG1">
            <div class="bloc-info">
               <h2 class="titre filet-bottom3">Coordinates</h2>
               <p>
                  555, avenue du Pont Nord<br />
                  Alma, Québec<br />
                  G8B6T5                                  
               </p>
               <p>
                  Phone number&nbsp;: 418 668-4657                   <br />
                  Fax&nbsp;:  418 668-2770                   
               </p>
            </div>
        </div>
    </div>
<div>

从以下位置加载: http://www.saq.com/webapp/wcs/stores/servlet/SAQStoreLocatorSearchResultsStoreDetailsView?storeLocationId=10374&catalogId=50000&langId=-1&storeIdentifier=33632&storeId=20002

我正在尝试提取以下详细信息并将它们加载到“storedetails”数组中:

  1. 街道编号 (555)

  2. 街道(北桥大道)

  3. 城市(阿尔玛)

  4. 州(魁北克)

  5. 邮政编码 (G8B6T5)

  6. 电话号码

  7. 传真

  8. 坐标(来自底部的js,也从上面那个页面加载)

正则表达式是唯一的解决方案,还是有更好的方法来做到这一点,至少知道每个地址的长度可能不同。

如果正则表达式是唯一的方法,是否有可能获得一些指针。我不确定我应该从标签开始多远。喜欢 from 因为这是自上而下此特定标签的第一个实例。

谢谢!

<script type="text/javascript">   
   dojo.addOnLoad(function(){
      var mapCenter = new google.maps.LatLng(48.55970, -71.63980);
      var optionsList = {
         zoom: 16,
         center: mapCenter,
         mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map(document.getElementById("GoogleMap"), optionsList);

      var storeMarker = new google.maps.Marker({
         position: mapCenter,
         map: map,
         icon: image
      });
   }); 
</script>

【问题讨论】:

  • 您可能想要使用正则表达式解析器来提取每个感兴趣的&lt;p&gt;,然后使用正则表达式来梳理各种地址组件。
  • 嗨,所以我想出了以下内容:(\d+), (\D+),\s(\D+)
    \s+(\D\d\D\d \D\d)\s+\s+

    。似乎得到了我最想要的。另一个问题是可以将 () 包围的每个正则表达式匹配组输出到我正在谈论的数组中。尝试谷歌,但似乎无法获得正确的关键字。

  • @Senri 是否要使用PHPHTML 中提取数据?

标签: php regex


【解决方案1】:

一般来说,从网页的纯 HTML 中读取数据非常危险,当您有其他可能性时,您不应该这样做。最大的问题是您永远不知道网页何时会更改,或者您获得的数据结构是否正确。

在您的示例中,您不知道数据将具有给定的结构:

[STREET_NR], [STREET]<br />
[CITY], [STATE]<br />
[POST_CODE]  

因此,最好的方法是联系 SAQ 并询问他们是否提供 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多