介绍
网络刮擦虽然非常有用,但通常要求开发人员在工具和图书馆的海洋中浏览,每个工具和图书馆都有自己的怪癖和复杂性。无论是JSDOM,Cheerio,Playwright,甚至是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没有提供许多使用的模式。