【问题标题】:how to detect ads in website content which are above the fold using php or node.js [closed]如何使用 php 或 node.js 检测网站内容中的广告
【发布时间】:2020-05-03 11:27:55
【问题描述】:

我需要抓取一个网站并检测页面上有多少广告。我已经使用 PHPCrawl 进行了爬网并将内容保存到数据库。如何检测网页是否有首屏广告?

【问题讨论】:

  • 你所说的“折叠”到底是什么意思?这不是一个技术术语 AFAIK。它是某种 SEO 术语吗?它与您可能尝试解析的 HTML 文档有何关联。附:值得注意的是,许多广告可能会在主页加载后通过脚本和/或 AJAX 加载,因此仅使用 cURL 之类的方式请求页面可能无法让您检测到它们。您可能需要更复杂的系统,例如通常为 GUI 测试而设计的无头浏览器或软件,因此它可以更像普通浏览器(带有 JS 环境等)。
  • 首屏,因为它适用于网页设计,是网页第一次加载时在浏览器窗口中可见的网页部分。需要滚动才能看到内容的页面部分称为“首屏下方”。
  • 好的。好吧,您不可能从网络抓取中知道这一点。这部分对于每个用户来说都会有所不同,具体取决于屏幕大小等。HTML 文档本身不会告诉您这些信息,它完全与每个用户及其浏览器会话相关。即使您使用了我上面提到的更复杂的方法,使用定义视口并可以知道什么可见和不可见的工具,您收集的任何数据仍将特定于该会话和该视口大小。因此,您必须使用几个“常见”视口大小重复测试才能获得有用的信息
  • (另外补充一点,即使您假设每个人的屏幕/视口大小相同,仅抓取的 HTML 文档仍然无法告诉您您在追求什么,因为您必须结合使用 CSS 并在您知道之前渲染它,而且由于现代网页通常使用脚本加载其他内容,这可能会影响布局,因此您几乎肯定不会看到完整的内容或最终布局。)
  • 你是对的。是不是意味着这个任务无法完成?

标签: php web-scraping web-crawler seo ads


【解决方案1】:

简单地说:你不能。至少不是以简单的方式。这里有很多事情需要考虑,所有这些都对您正在抓取的网页、使用的设备等具有高度主观性。我将尝试解释您需要解决的一些主要问题。

动态内容

第一个大问题是,您只有 HTML 结构,它本身并没有提供直接的视觉信息。如果我们是在 1990 年,那将会是这样,但是现代网站使用 CSS 和 JS 来增强其页面核心结构。您在浏览器中看到的不仅仅是按原样呈现的 HTML。它受 CSS 样式甚至 JS 诱导的代码片段的影响,这些片段可以显着改变页面。例如:任何具有所谓的 AJAX 加载器的页面都将输出为一个非常简单的 HTML 代码块,您可以在爬虫中看到该代码块。但是真正的页面是在渲染之后加载的(来自 JS)。

视口

您所说的“首屏”是一个任意术语,无法在全球范围内定义。智能手机的视口与台式 PC 截然不同。此外,大多数现代网站对移动设备、平板电脑和桌面设备使用非常不同的结构。但是,假设您只想为桌面设备执行此操作。您可以在最常用的屏幕分辨率上定义一个平均视口(您可以在 Internet 上找到)。我们现在将其定义为 1366x786(基于快速谷歌搜索)。但是,您仍然只有一个 PHP 脚本和一个 HTML 字符串。这给我们带来了下一个问题。

渲染

您在浏览器中看到的内容实际上是一个复杂系统的结果,该系统与 HTML 和所有链接资源协同工作,以呈现您已爬取的代码的可视化表示。除了您获得的 HTML 字符串的核心结构之外,任何链接的资源都可以(并且将会)改变内容的外观。他们甚至可以根据各种条件添加更多内容。因此,获得实际视觉信息所需的是所谓的“无头浏览器”。只有这样才能为您提供有关所需视口内实际可见内容的有效信息。如果您想深入研究该主题,一个很好的起点是像“PhantomJS”这样的发行版。但是,不要认为这是一件容易的事。你仍然只有一些数据,没有任何上下文。

上下文或“什么是广告?”

假设您已经解决了所有这些问题并编写了一个脚本,该脚本实际上可以解释您从爬虫中获得的所有内容。您仍然需要知道“什么是广告?”。这是一个巨大的问题。当然,对于您作为人类来说,很容易区分什么是网站的一部分和什么是广告。但将其翻译成代码更像是一项人工智能任务,而不仅仅是一个基本的脚本。例如:在实际页面加载之后,广告可以(并且大部分时间)加载到预定义的容器中。反过来,这些可能只有一个神秘的 ID 集,将它们与(实际有效的)页面内容的其余部分区分开来。如果幸运的话,它有一个带有“advertisment”之类的字符串的类,但您不能将其定义为给定的。广告会受到各种广告拦截器的影响,因此它们长期以来一直试图尽可能地展示自己。您将很难弄清楚什么是广告,以及什么是有效的网页内容。

因此,虽然我只解决了您将遇到的一些问题,但我想说这并非不可能。但你必须明白,你正处于最基本的切入点,如果你想制作一个真正可以工作的系统,你将不得不花费大量时间进行微调,甚至可能在 AI 领域进行研究。

回到您的问题:“如何检测网页是否有广告”没有简单的答案。因为它比你想象的要复杂得多。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多