portadom:DOM操纵的统一接口
#javascript #html #网络开发人员 #webscraping

介绍

网络刮擦虽然非常有用,但通常要求开发人员在工具和图书馆的海洋中浏览,每个工具和图书馆都有自己的怪癖和复杂性。无论是JSDOMCheerioPlaywright,甚至是DevTools控制台中的普通旧Vanilla JS,在这些平台之间移动都可能是一个挑战。

输入Portadom,您在网络刮擦世界中的新最好的朋友。

什么是portadom?
Portadom在以下方面提供了一个一致的DOM操作接口:

  • 浏览器API
  • jsdom
  • Cheerio
  • 剧作家

这意味着在这些工具之间切换时,您不再需要重写或重构大块。相反,您可以专注于网络刮擦任务的逻辑,并让Portadom处理DOM操纵复杂性。

Portadom工作流程

想象一下,您正在研究一个项目,以从多个网站刮擦数据。您最初是从使用香草JS在DevTools控制台中进行原型开始的。一旦找出了转换和数据提取,您就会意识到某些站点可以用静态HTML刮擦,而另一些则需要JS运行时。

1.使用香草JS的原型制作

您从一个简单的站点开始,然后直接在DevTools中定义转换:

let title = document.querySelector('h1').innerText;

2.与JSDOM或CHEERIO的静态HTML

对于静态HTML足够的网站,您可以轻松地迁移香草JS逻辑:

import { load as loadCheerio } from 'cheerio';
import { cheerioPortadom } from 'portadom';

const html = `<h1>Welcome to Portadom</h1>`;
const $ = loadCheerio(html);
const dom = cheerioPortadom($.root(), null);

const title = await dom.findOne('h1').text();

在Portadom的情况下,过渡几乎是无缝的。核心逻辑保持一致,只有设置更改。

3.与剧作家的动态网站

对于严重依赖JavaScript的网站,您需要像Playwright这样的工具。但是有了Portadom,即使这种过渡也很顺利:

import { playwrightLocatorPortadom } from 'portadom';

const page = await browser.newPage();
await page.goto('https://example.com');

const bodyLoc = page.locator('body');
const dom = playwrightLocatorPortadom(bodyLoc, page);

const title = await dom.findOne('h1').text();

请注意,仅设置再次更改。多亏了Portadom,实际的DOM查询逻辑保持一致。

拥抱灵活性

portadom就是关于灵活性。无论您从哪里开始 - 与Cheerio一起进行静态HTML解析或动态网站的剧作家 - 您永远不会锁定。逻辑。

与Portadom一起飞跃

网络刮擦是挑剔的 - 一切都始终崩溃。借助Portadom,您配备了一种工具,该工具使您可以专注于制定完美的数据提取策略,而不会被各种DOM操纵库的复杂性所困扰。潜入并让Portadom简化您的网络刮擦旅程!

Portadom已经成功地用于刮擦:

Portadom当前支持以下操作:

  • 元素属性,属性,文本
  • findOne-相当于document.querySelector
  • findMany-相当于document.querySelectorAll
  • closest-相当于Element.closest
  • parent-相当于Element.parent
  • children-相当于Element.children
  • root-获取文档root
  • remove-删除当前元素
  • getCommonAncestor-在这个和other元素之间获得共同的祖先
  • getCommonAncestorFromSelector-在此和other元素之间获得共同的祖先(选择器找到)

Facebook提示需要添加getCommonAncestor方法,因为Facebook的HTML没有提供许多使用的模式。

了解更多