我正在尝试使用cheerio和puppeteer模块从HTML响应中仅提取Email(myemail@hotmail.com)。但是我得到了不同的东西,我根本不需要使用所有东西。 它被放置在td / tr中的Class p2中。 同时将tr作为参数放入
这是我的代码的样子:
const puppeteer = require('puppeteer');
const $ = require('cheerio');
const url = 'https://mywebsite.com';
puppeteer
.launch()
.then(function(browser) {
return browser.newPage();
})
.then(function(page) {
return page.goto(url).then(function() {
return page.content();
});
})
.then(function(html) {
$('tr', html).each(function() {
// putting all the result into the list
console.log($(this).text());
});
})
.catch(function(err) {
//handle error
});
我正在查看此输出:
移动邮政信箱电路
myemail@hotmail.com
电子邮件myemail@hotmail.com 经理 秘书我只需要myemail@hotmail.com
这是我的HTML表格:
</td>
</tr>
<tr>
<td class="p1">E-mail</td>
<td class="p2">
<span style="float: none; word-wrap: break-word;"> <a href="mailto:myEmal@hotmail.com"> myEmal@hotmail.com
<div style="padding-right: 2px; background-position: -115px -434px; height: 14px !important; float: right" class="ico"></div>
</a>
</span>
</td>
答案 0 :(得分:1)
尝试在该课程的时间范围内获取内容。
console.log($(this).find('td.p2').text());
答案 1 :(得分:1)
考虑HTML的最简单方法是:
$('td.p2 a[href^=mailto]', html).each(function() {
console.log($(this).text().trim());
});
请注意,抓取后需要关闭浏览器:
let _browser;
puppeteer
.launch()
.then(function(browser) {
_browser = browser; // <-- memorize browser reference
return _browser.newPage();
})
.then(function(page) {
return page.goto(url).then(function() {
return page.content();
});
})
.then(function(html) {
$('td.p2 a[href^=mailto]', html).each(function() {
console.log($(this).text().trim());
});
})
.then(function(){
_browser.close() // <-- use it to close the browser
})
如果您正在运行8+节点,则最好将async / await用于此类脚本。