提取标签结束和开始之间的文本
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());
这应该有效:
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>
我要提取电话号码:
我正在使用 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());
这应该有效:
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>