【问题标题】:PHP file_get_contents after page is fully load页面完全加载后的PHP file_get_contents
【发布时间】:2019-12-19 18:00:00
【问题描述】:

我正在创建一个使用 PHP file_get_contents 函数抓取 Google 搜索结果的网站。我已经问了here,他们告诉我应该在页面完全加载后加载,但是我该怎么做呢?

我的问题是我想读出结果,如果我去 google.com,每个标题都是 H3。但是当我加载它时,每个标题都有一个独特的类。

我的代码

<?php

require 'simple_html_dom.php';

echo '
    <link rel="stylesheet" href="search.css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
    <link rel="shortcut icon" type="image/png" href="favicon.png" />
    <body><div class="container">
';

$query = $_GET['q'];
if($query == '') {
    echo '<script type="text/javascript">window.location.href="index.html";</script>';
}

echo '<title>'.$query.' | SearchAda</title>';

echo '
    <form action="search.php" method="get">
        <a href="index.html"><h1 class="brand">SearchAda</h1></a>
        <div class="input-group">
            <input type="text" name="q" value="'.$query.'" placeholder="Typ uw zoekopdracht..." />
            <i class="fa fa-search"></i>
        </div>
    </form>
';

$url = 'https://www.google.com/search?q='.str_replace(' ','+',$query);

$doc = file_get_html($url);
echo $doc;

?>

部分截图 - -

【问题讨论】:

  • google 在&lt;h3&gt; 有课程,例如&lt;h3 class="LC20lb"&gt;Google&lt;/h3&gt;
  • 是的,但如果我使用 file_get_contents 他不会返回 H3 标记。
  • 如果您可以共享所有代码,有人可以提供帮助,您只共享 html 部分
  • 这些都是我的代码!

标签: php search-engine file-get-contents


【解决方案1】:

如果您只是下载网站的源代码并尝试显示它,您将遇到问题。所有相关资源(&lt;link rel="/..."&gt;&lt;script src="/..." 和图像)都需要下载或修改以直接使用原始资源(您可能会遇到访问问题)。这也会给许多网站上的一些脚本和 CORS 带来问题。

看起来您正在寻找的是一个 HTML 渲染器来处理网站并为您提供真实的结果。仅仅下载页面和资产是不够的,它们需要一些基本的处理(另见网络爬虫/蜘蛛)。

How Browsers Work: Behind the scenes of modern web browsers

【讨论】:

  • 您好,感谢您的回答!但是我该怎么做呢?我知道这不是一个简单的方法,但必须有一个方法。你有什么建议我该怎么做?
  • @JeroenvanRensen 尝试从基本的 php 网络爬虫示例开始:stackoverflow.com/a/2313270/9142698,看看它是否满足您的需求。对于 Google 来说应该足够了,但是如果您需要处理动态网站,则需要设置使用 html 渲染引擎。当我需要一个时,我使用了 PhantomJS phantomjs.org 编辑:如果您需要中间解决方案,这里有一个功能完整的 PHP 网络爬虫,我一直在寻找:github.com/spatie/crawler
  • 嗨,我已经试过你的第一个链接。我创建了这段代码,不幸的是它也没有用。它返回一个空白网页。 ` loadHTMLFile($url); $headings = $dom->getElementsByTagName('h3'); foreach ($headings as $content) { $content = $element->nodeValue;回声$内容; } } crawl_page("google.com/search?q=test"); `
【解决方案2】:

您似乎正在尝试为您的网站创建一个谷歌搜索框。 如果是这样的话!我建议在这里进行谷歌搜索: https://developers.google.com/custom-search/docs/tutorial/introduction

如果您想使用自己的代码(您很难获得完整的解决方案):

我会给你一个可行的例子(不是一个完整的解决方案)。

创建一个名为 search_result.php 的文件并将以下代码粘贴到 php 标签中。

require 'simple_html_dom.php';// I am not sure what this file is for :)

    $str = $_POST["q"]; 

      $url = "https://www.google.com/search?q=".str_replace(' ','+',$str);

    $result = file_get_contents($url);

    echo $result;

并创建一个名为 search.php 的文件并将以下代码粘贴到:

	<form action="search_result.php" method="post">
		<input type="text" name="q" class="field" id="keyword" placeholder="Aranacak kelime..." required />
		<input type="submit" name="submit_search" class="search-btn" value="" />
	</form>

注意:这是一个工作示例,但不是完整的解决方案

.

祝你好运

【讨论】:

    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2017-04-11
    • 1970-01-01
    • 2015-04-22
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多