我想提取电话号码:
我正在使用NodeJS / ExpressJS / Request / Cheerio。
此代码将成为网络抓取工具的一部分。
<div class="info">
<h3> Home </h3>
<p>
<strong> Tel: </strong>
01345 000000
<strong> Fax: </strong>
01345 000000
</p>
<p>
</p>
&#13;
我目前只能检索文字&#34;电话:&#34;。
以下是我取得的进展:
$('div.info p').filter(function() {
$(this).find('strong').filter(function() {
var phonenumber = $(this).text();
console.log(phonenumber);
});
});
&#13;
答案 0 :(得分:2)
我在第一个<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>
答案 1 :(得分:1)
您的电话号码未包含在<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/
答案 2 :(得分:1)
您正在获取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());
答案 3 :(得分:1)
这应该有效:
var temp = $('p');
temp = temp.text().trim();
temp = temp.substring(4, 22);
$('.info').html(temp);
&#13;
<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>
&#13;