提取标签结束和开始之间的文本

Extracting text between end and start of tags

我要提取电话号码:

我正在使用 NodeJS / ExpressJS / Request / Cheerio。

此代码将成为网络爬虫的一部分。

<div class="info">
  <h3> Home </h3>
  <p>
    <strong> Tel: </strong>
    01345 000000
    <strong> Fax: </strong>
    01345 000000
  </p>
  <p>
  </p>

我目前只能检索文本 "Tel:"。

这是我取得的进步:

$('div.info p').filter(function() {
  $(this).find('strong').filter(function() {
    var phonenumber = $(this).text();
    console.log(phonenumber);
  });
});

您的 phone 号码未包含在 <strong> 标签中。从您的 HTML 中提取它们的一种方法是使用某种正则表达式,例如:

var regexp = /"([\d ]+)"/g;
var text = $('div.info p').text();
var phone_nr = regexp.exec(text);
while (phone_nr != null) {
    console.log(phone_nr[1]);
    phone_nr = regexp.exec(text);
}

jsfiddle: https://jsfiddle.net/g1L4ux5g/

您正在获取 strong 元素的文本内容。您可以使用 nextSibling 属性 来选择下一个兄弟节点。

$('div.info p strong').each(function() {
    var phonenumber = this.nextSibling.nodeValue.trim();
    console.log(phonenumber);
  });
});

需要注意的是,当 strong 元素没有下一个兄弟元素时,上述代码将抛出错误。您可以将节点传递给 jQuery/Cheerio,它会处理幕后的边缘情况:

var phonenumber = $.trim($(this.nextSibling).text());

http://jsfiddle.net/vs3psmnq/

这应该有效:

var temp = $('p');
temp = temp.text().trim();
temp = temp.substring(4, 22);

$('.info').html(temp);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="info">
  <h3> Home </h3>
  <p>
    <strong> Tel: </strong>
    01346 000000
    <strong> Fax: </strong>
    01345 000000
  </p>
  <p>
</p>

我已经将第一个 <p> 之间的文本应用到它上面,就像 的第一次出现的子字符串: 使用 getPosition(str, m, i) 函数和 'F' 字符。然后修剪任何结果。

$('div.info p:first').filter(function() {
  $(this).filter(function() {
    var phonenumber = $(this).text();
    //console.log(phonenumber);
    alert(phonenumber.substring(getPosition(phonenumber, ':', 1)+1, phonenumber.indexOf('F')).trim());
  });
});

function getPosition(str, m, i) {
   return str.split(m, i).join(m).length;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div class="info">
  <h3> Home </h3>
  <p>
    <strong> Tel: </strong>
    01345 000000
    <strong> Fax: </strong>
    01345 000000
  </p>
  <p>
  </p>