用 cheerio 提取文本
Extract text with cheerio
我正在尝试编写脚本以从 this 网站提取电子邮件 ID 和名称。我尝试了以下代码片段,但它不起作用。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>foo</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div>
<strong style="color: darkgreen;">Can read this tag</strong>
<object id="external_page" type="text/html" data="https://aleenarais.com/buddy/" width="800px" height="600px"
style="overflow:auto;border:5px ridge blue">
<!-- I want to read tag values from this object -->
</object>
</div>
<script>
window.addEventListener('load', function () {
const item = [];
$('strong[style="color: darkgreen;"]').each(function () {
item.push($(this).text())
})
console.log(item)
})
</script>
</body>
</html>
有更好的方法吗?或者是否可以将整个页面转换为字符串并使用 RegEx 提取电子邮件?
试试这个:
window.addEventListener('load', function () {
let item = [];
$('strong[style*="color: darkgreen;"]').each(function (index, item) {
item.push($(this).text())
})
console.log(item)
}
网页中的电子邮件和名称正在 iframe 中呈现。 iframe 的来源是外部来源。为了让您提取信息,您需要使用无头浏览器来执行此操作。
我建议使用 Node.JS & Puppeteer (https://www.npmjs.com/package/puppeteer)
const puppeteer = require("puppeteer");
(async() => {
const url = "https://aleenarais.com/buddy/";
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, {
waitUntil: "networkidle0"
});
var frames = await page.frames();
var myframe = frames.find(
(f) => f.url().indexOf("https://feedium.app/fetchh.php") > -1
);
const textFeed = await myframe.$$eval("strong", (sElements) =>
sElements.map((el) => el.textContent)
);
console.log(textFeed.splice(1)); //Array contains both name and email
await browser.close();
})();
Puppeteer 加载页面的方式类似于用户加载页面的方式。它会等到所有网络调用都完成(请参阅网络空闲 0),然后尝试查找具有 url (fetchh.php) 的 iframe。如果您观察,名称和电子邮件出现在强标签中,并且它们是唯一可用的强标签。因此,我们正在提取强标签,删除计数,我们只剩下姓名和电子邮件。
输出:
[ 'JJ', 'j*j@gmail.com' ] //我刚刚屏蔽了值但程序给出了实际值
运行 脚本的步骤:
- 安装 Node.Js (https://nodejs.org/en/download/)
- 使用 (npm i puppeteer) 安装 puppeteer
- 复制脚本并将其放入文件 (demo.js)
- 在终端中,导航到 demo.js 所在的目录
现在然后 运行 node demo.js
您应该会看到输出。
我正在尝试编写脚本以从 this 网站提取电子邮件 ID 和名称。我尝试了以下代码片段,但它不起作用。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>foo</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div>
<strong style="color: darkgreen;">Can read this tag</strong>
<object id="external_page" type="text/html" data="https://aleenarais.com/buddy/" width="800px" height="600px"
style="overflow:auto;border:5px ridge blue">
<!-- I want to read tag values from this object -->
</object>
</div>
<script>
window.addEventListener('load', function () {
const item = [];
$('strong[style="color: darkgreen;"]').each(function () {
item.push($(this).text())
})
console.log(item)
})
</script>
</body>
</html>
有更好的方法吗?或者是否可以将整个页面转换为字符串并使用 RegEx 提取电子邮件?
试试这个:
window.addEventListener('load', function () {
let item = [];
$('strong[style*="color: darkgreen;"]').each(function (index, item) {
item.push($(this).text())
})
console.log(item)
}
网页中的电子邮件和名称正在 iframe 中呈现。 iframe 的来源是外部来源。为了让您提取信息,您需要使用无头浏览器来执行此操作。
我建议使用 Node.JS & Puppeteer (https://www.npmjs.com/package/puppeteer)
const puppeteer = require("puppeteer");
(async() => {
const url = "https://aleenarais.com/buddy/";
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, {
waitUntil: "networkidle0"
});
var frames = await page.frames();
var myframe = frames.find(
(f) => f.url().indexOf("https://feedium.app/fetchh.php") > -1
);
const textFeed = await myframe.$$eval("strong", (sElements) =>
sElements.map((el) => el.textContent)
);
console.log(textFeed.splice(1)); //Array contains both name and email
await browser.close();
})();
Puppeteer 加载页面的方式类似于用户加载页面的方式。它会等到所有网络调用都完成(请参阅网络空闲 0),然后尝试查找具有 url (fetchh.php) 的 iframe。如果您观察,名称和电子邮件出现在强标签中,并且它们是唯一可用的强标签。因此,我们正在提取强标签,删除计数,我们只剩下姓名和电子邮件。
输出: [ 'JJ', 'j*j@gmail.com' ] //我刚刚屏蔽了值但程序给出了实际值
运行 脚本的步骤:
- 安装 Node.Js (https://nodejs.org/en/download/)
- 使用 (npm i puppeteer) 安装 puppeteer
- 复制脚本并将其放入文件 (demo.js)
- 在终端中,导航到 demo.js 所在的目录 现在然后 运行 node demo.js
您应该会看到输出。