从网站获取html源代码,然后从html文件中获取元素

2024-03-21

我想获取网站的 HTML 代码,然后从该 HTML 文件中获取某个元素。

有些东西可以获取 HTML 代码,例如 ajax 和 jquery。我正在使用节点并希望它是完整的JavaScript。另外,我不知道如何从中获取某个元素。

我已经在 python 中完成了此操作,但我需要在 javascript 中完成此操作。为了简单起见。我们以网站为例——https://example.com https://example.com。这是网站 HTML 代码的主体。

<body>
<div>
    #Some Stuff 
</div>
</body>

我想要获得 div 类,让我们来吧<div> to be <div class="test">让事情变得更容易。

最后,我想得到-的内容<div class="test">

像这样-

<div class="test">
    #Some Stuff 
</div>

提前致谢


对于 Node.js 有两个本机获取模块:http and https。如果您想使用 Node.js 应用程序进行抓取,那么您可能应该使用https,获取页面的 html,用 html 解析器解析它,我推荐cheerio。这是一个例子:

// native Node.js module
const https = require('https')
// don't forget to `npm install cheerio` to get the parser!
const cheerio = require('cheerio')

// custom fetch for Node.js
const fetch = (method, url, payload=undefined) => new Promise((resolve, reject) => {
    https.get(
        url,
        res => {
            const dataBuffers = []
            res.on('data', data => dataBuffers.push(data.toString('utf8')))
            res.on('end', () => resolve(dataBuffers.join('')))
        }
    ).on('error', reject)
})

const scrapeHtml = url => new Promise((resolve, reject) =>{
  fetch('GET', url)
  .then(html => {
    const cheerioPage = cheerio.load(html)
    // cheerioPage is now a loaded html parser with a similar interface to jQuery
    // FOR EXAMPLE, to find a table with the id productData, you would do this:
    const productTable = cheerioPage('table .productData')

    // then you would need to reload the element into cheerio again to
    // perform more jQuery like searches on it:
    const cheerioProductTable = cheerio.load(productTable)
    const productRows = cheerioProductTable('tr')

    // now we have a reference to every row in the table, the object
    // returned from a cheerio search is array-like, but native JS functions
    // such as .map don't work on it, so we need to do a manually calibrated loop:
    let i = 0
    let cheerioProdRow, prodRowText
    const productsTextData = []
    while(i < productRows.length) {
      cheerioProdRow = cheerio.load(productRows[i])
      prodRowText = cheerioProdRow.text().trim()
      productsTextData.push(prodRowText)
      i++
    }
    resolve(productsTextData)
  })
  .catch(reject)
})

scrapeHtml(/*URL TO SCRAPE HERE*/)
.then(data => {
  // expect the data returned to be an array of text from each 
  // row in the table from the html we loaded. Now we can do whatever
  // else you want with the scraped data. 
  console.log('data: ', data)
})
.catch(err => console.log('err: ', err)

快乐刮擦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从网站获取html源代码,然后从html文件中获取元素 的相关文章

随机推荐

  • 如何解析MICR线数据?

    我有一台数字支票扫描仪 能够从支票中捕获 MICR 线 它将以字符串形式返回原始格式的 MICR 行 并使用分隔符分隔帐号 路由号码和支票号码 然而 每个银行对该 MICR 行的格式都不同 因此没有标准的方法来解析该数据 我尝试过的一些公司
  • Pandas 更新多索引数据框中的值

    如何编辑多索引数据框的值 如果它是一个非多索引数据框 我知道我可以这样做 df at 0 foo 12 3 另外 这不起作用 df loc 0 foo a 12 3 考虑一个多索引列数据框 colnames foo foo foo po p
  • 启动 spring web mvc 应用程序时出现异常

    当我使用 spring 3 2 9 时 我的 spring 项目工作正常 但如果我将其更改为 4 1 4 则在启动应用程序时会出现以下异常
  • 使用 C# 向 GMail 发送 IMAP 命令

    我一直在尝试访问我的 GMail 帐户以从我的电子邮件帐户中检索未读电子邮件 但是 我只执行登录 之后的任何操作都不起作用 首先 我连接到服务器 然后发送登录命令 最后发送检查命令 问题是收到的响应仅涉及连接和登录 之后 它就停止等待从 S
  • 通用保存方法

    在我的通用存储库中 我需要编写通用 Save 方法 该方法将根据 id 编辑现有实体或添加新实体 public void Save
  • Docker:更改存储 docker 卷的文件夹

    On my Ubuntu EC2我使用 docker 容器托管一个应用程序 db数据和upload数据存储在卷中CaseBook data db and CaseBook data uploads这是使用以下命令创建的 docker vol
  • EFcore 中“FromSql”操作的结果中不存在所需的列“id”

    我有一个大问题FromSql就是这样 我有一个这样的模型 public partial class model public string name 我想从数据库 sql server 中的过程中获得一些结果 当我执行下面的代码时 var
  • Android 中的处理程序和内存泄漏

    请看下面的代码 public class MyGridFragment extends Fragment Handler myhandler new Handler Override public void handleMessage Me
  • 将一个静态共享库链接到我的共享库

    我在链接我当前正在从事的项目的一些选项方面遇到了一些困难 我正在尝试创建一个与其他 2 个库链接的共享库 我们称他们为libfoo so and libbar so 我的输出库必须是共享库 并且我想要静态链接libfoo so到生成的库 但
  • 无需 Visual Studio 即可部署到 Azure WebRole

    有没有一种方法可以将我的整个网站 Web 应用程序部署到 Azure WebRole 而不需要 Visual Studio Context IIS 网络部署 http www iis net downloads microsoft web
  • 如何在React Native中以redux形式设置隐藏字段?

    如何在React Native中以redux形式设置隐藏字段 我只是找不到任何方法来做到这一点 有什么帮助吗 我结束使用这个 this props dispatch change FORM NAME FIELD NAME VALUE 运行此
  • 为什么这个图在添加散点时失败,但在删除散点时却有效?

    我正在使用以下内容来绘制 x 日期和 y 小数 如果没有注释行 散点 它的效果很好 但是如果您取消注释它 它会在一个 x 轴上显示所有内容 我缺少什么 thanks import matplotlib pyplot as plt impor
  • 使用 TypeScript 实现流畅的 API?

    我正在尝试用 TypeScript 开发一个流畅的 api 我想使用它 如下所示 export interface Person firstName string lastName string new Builder
  • 您如何比较今年和去年同一周的同一天?

    大多数零售商在销售报告中使用商品日历 这可以帮助他们找到当年和上一年同一周的同一天 例如今天是 2016 10 10 星期一 上一年 2015 年同一周 星期一是 2015 年 10 月 12 日 我们如何通过 SQL 查询捕获这一点并将它
  • 分页库和房间具有不同的 PagedLists,取决于不同的请求

    我正在尝试使用新的 Android 架构组件设置所有列表 房间持久性库 https developer android com topic libraries architecture room html and 分页库 https dev
  • 如何使用批处理文件构建解决方案

    我想使用批处理文件构建 NET 解决方案 我知道我需要使用以下语句 devenv build release D Source Code Source test sln 但我不知道如何创建将在 VS 命令提示符下执行的批处理文件 Visua
  • .Net 的 RSS/Atom 解析库

    我正在尝试找到一个可以读取给定 RSS Atom 提要的库 并且可以猜测其格式并将其抽象为项目列表 这个想法是构建一个可以接收任何提要的简单 RSS 阅读器 我知道 PHP 有一些库可以做到这一点 但我找不到任何 Net 版本 如果您使用的
  • 仅获取未隐藏的元素.. Jquery

    我只需要获取 jquery foreach 循环中的 show 元素 在下面的代码中 我得到了所有带有类测试的元素 即隐藏和显示的元素 但只需要显示而不是隐藏一个 如何过滤并在这一行本身中获取它 element find test each
  • 将 Symfony 翻译传递给 Symfony Webpack Encore

    对于 Symfony 我使用翻译 https symfony com doc current components translation html 树枝和Webpack 再来一次 https symfony com doc current
  • 从网站获取html源代码,然后从html文件中获取元素

    我想获取网站的 HTML 代码 然后从该 HTML 文件中获取某个元素 有些东西可以获取 HTML 代码 例如 ajax 和 jquery 我正在使用节点并希望它是完整的JavaScript 另外 我不知道如何从中获取某个元素 我已经在 p