【问题标题】:PHP: Get all CSS files of an HTML web pagePHP:获取 HTML 网页的所有 CSS 文件
【发布时间】:2018-09-21 22:18:10
【问题描述】:

我正在尝试从 URL 获取 html 文件的所有 CSS 文件。

我知道如果我想获得 HTML 代码很容易 - 只需使用 PHP 函数 - file_get_contents

问题是 - 如果我可以在 HTML 的 URL 中轻松搜索并从那里获取所有相关 CSS 文件的文件或内容?

注意 - 我想构建一个引擎来获取大量 CSS 文件,这就是为什么仅仅阅读源代码是不够的..

谢谢,

【问题讨论】:

  • 您是否尝试使用 PHP 检索页面,然后解析该页面以获取 CSS 文件列表?如果是这样,javacript 是如何影响的? (你用 javascript 标记了你的问题)
  • 您可能需要将来自 HTML 的响应加载到 DOM 解析器中并开始寻找 link 类型为 text/css 的元素,从中提取 URL,并创建新的 file_get_contents他们每个人的请求。除此之外,您还需要解析整个 HTML 中嵌入的 style 标记和内联 style 属性。
  • Josh - 我更新了我的问题。当然,阅读源代码很容易,但我需要它用于数千个网站。

标签: php html css


【解决方案1】:

您可以尝试使用http://simplehtmldom.sourceforge.net/ 进行 HTML 解析。

require_once 'SimpleHtmlDom/simple_html_dom.php';

$url = 'www.website-to-scan.com';
$website = file_get_html($url);

// You might need to tweak the selector based on the website you are scanning
// Example: some websites don't set the rel attribute
// others might use less instead of css
//
// Some other options:
// link[href] - Any link with a href attribute (might get favicons and other resources but should catch all the css files)
// link[href="*.css*"] - Might miss files that aren't .css extension but return valid css (e.g.: .less, .php, etc)
// link[type="text/css"] - Might miss stylesheets without this attribute set
foreach ($website->find('link[rel="stylesheet"]') as $stylesheet)
{
    $stylesheet_url = $stylesheet->href;

    // Do something with the URL
}

【讨论】:

    【解决方案2】:

    您需要解析 HTML 标记以查找 CSS 文件。例如,您可以使用 preg_match - 寻找匹配的正则表达式。

    找到此类文件的正则表达式可能是这样的:

    \<link .+href="\..+css.+"\>
    

    【讨论】:

    • 使用正则表达式解析 HTML 是灾难的秘诀。 -1
    • 这是一个快速的评论,没有想太多,我说这只是一个例子,你可以如何做到这一点。你是对的,这不是最好的主意,但出于简单的目的,这很好。如果你只需要找到一些简单的东西,我觉得使用 simpleHtml 有点过头了。
    • 不,这总是一个坏主意。 HTML 不是一种常规语言,因此如果您想要一致的结果(通常是程序员所追求的),那么您应该使用适当的工具。我同意 simpleHTML 不是必需的,因为 PHP 在没有添加第三方库的情况下具有 DomDocument。但是,我不同意您的观点,即出于“简单目的”使用不良做法是可以的。如果你想要可靠的代码,你应该每次都以正确的方式去做。
    • 好吧,我 100% 同意你的看法。我在这里的回答是错误的,但我所说的简单目的是指仅解析一个站点,您知道哪个结构并且您知道它不会改变。对于随机页面......这是一个坏主意,真的。
    • 我不同意@Chris Baker。它仍然是一种定义明确的语言,匹配 css 包含非常简单,应该比使用 dom 解析器更受青睐。当 HTML 无效时,即使是 DOM 解析器也可能出错,然后正则表达式的性能通常会更好。当然,我会投入一些时间并改进正则表达式以使其具有一点容错性,但我会采用该解决方案。
    猜你喜欢
    • 2011-09-23
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多