2

我正在尝试使用 Google App Script 通过将搜索词设为变量来更改 Apify Google Search Scraper 中的搜索查询。https://apify.com/apify/google-search-scraper

我想看看我是否可以通过它的代码引用它。https://github.com/apifytech/actor-google-search-scraper/blob/master/src/main.js

我得到这个

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" class="__meteor-css__" href="https://cdn.apify.com/35dedb64425e459215b6d9b580601d18eccb1d29.css?meteor_css_resource=true">
<meta charset="utf-8" />
    <title>My Apify</title>
    <meta name="description" content="Apify (formerly Apifier) is the world’s most advanced web scraping and automation platform. Turn any website into an API in a few minutes." />
    <meta name="copyright" content="Copyright&copy; 2018 Apify Technologies s.r.o. All rights reserved." />
    <meta name="keywords" content="web scraper, web crawler, data extraction, API" />
    <meta name="robots" content="index, follow" />
    <meta name="referrer" content="origin" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />

    <meta property="og:title" content="Apify - The web scraping and automation platform" />
    <meta property="og:site_name" content="Apify" />
    <meta property="og:url" content="https://apify.com" />
    <meta property="og:type" content="website" />
    <meta property="og:description" content="Apify (formerly Apifier) is the world’s most advanced web scraping and automation platform. Turn any website into an API in a few minutes." />
    <meta property="fb:app_id" content="1636933253245869" />
    <meta property="og:image" content="https://apify.com/img/og-image.png" />
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta property="og:image" content="https://apify.com/img/og-image-square.png?v=2">
    <meta property="og:image:width" content="1000" />
    <meta property="og:image:height" content="1000" />

    <link rel="icon" type="image/svg+xml" href="https://apify.com/img/favicon.svg" sizes="any" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-128x128.png" sizes="128x128" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-96x96.png" sizes="96x96" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-64x64.png" sizes="64x64" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-48x48.png" sizes="48x48" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-32x32.png" sizes="32x32" />
    <link rel="icon" type="image/png" href="https://apify.com/img/favicon-16x16.png" sizes="16x16" />
    <link rel="icon" type="image/x-icon" href="https://apify.com/favicon.ico" sizes="16x16 32x32 48x48 64x64" />
    <link rel="apple-touch-icon" href="https://apify.com/img/apple-touch-icon-180x180.png" sizes="180x180" />
    <script type="text/javascript" defer id="ie-check-script">
        var userAgent = navigator.userAgent.toUpperCase();
        // IE 11 uses user agent containing Trident as browser identifier, while IE bellow 11 has MSIE as browser identifier
        var browserIsIE = userAgent.indexOf('TRIDENT/') != -1 || userAgent.indexOf('MSIE') != -1;
        // If browser is detected as IE we show warning instead of document body, otherwise we remove this script
        if (browserIsIE) {
            var chromeLink = '<a href="https://www.google.com/chrome/">Google Chrome</a>';
            var firefoxLink = '<a href="https://www.mozilla.org/cs/firefox/new/">Mozilla Firefox</a>';
            var edgeLink = '<a href="https://www.microsoft.com/en-us/windows/microsoft-edge">Microsoft Edge</a>';
            var safariLink = '<a href="https://www.apple.com/safari/">Apple Safari</a>';
            var warningStyles = 'display: inline-block; margin: 10px; padding: 25px; border: 1px solid rgb(255, 200, 200); border-radius: 4px; font-size: 16px; background-color: rgb(255, 240, 240);';

            var message = '<div style="text-align:center;"><div style="'+warningStyles+'">We are sorry, but your browser is currently not supported by our platform.<br />'
                +'Please download one of the supported browsers: '+chromeLink+', '+firefoxLink+', '+edgeLink+' or '+safariLink+'.</div></div>';
            var newBody = document.createElement('body');
            newBody.innerHTML = message;
            document.body = newBody;
        } else {
            var thisScript = document.querySelector('#ie-check-script');
            thisScript.parentElement.removeChild(thisScript);
        }
    </script>

</head>
<body>
  <script type="text/javascript">__meteor_runtime_config__ = JSON.parse(decodeURIComponent("%7B%22meteorRelease%22%3A%22METEOR%401.10.1%22%2C%22gitCommitHash%22%3A%223a3adab260deebeece444a11c4a79a49bd6b60e5%22%2C%22meteorEnv%22%3A%7B%22NODE_ENV%22%3A%22production%22%2C%22TEST_METADATA%22%3A%22%7B%7D%22%7D%2C%22PUBLIC_SETTINGS%22%3A%7B%22sentryDsn%22%3A%22https%3A%2F%2Fb61d4f03051b49e4ac4162e9e14314e8%40sentry.io%2F1494973%22%2C%22sentryEnv%22%3A%22prod%22%2C%22webScraperActorId%22%3A%22moJRLRc85AitArpNN%22%2C%22puppeteerScraperActorId%22%3A%22YJCnS9qogi9XxDgLB%22%2C%22legacyPhantomjsCrawlerActorId%22%3A%22YPh5JENjSSR6vBf2E%22%2C%22analyticsSettings%22%3A%7B%22Google%20Analytics%22%3A%7B%22trackingId%22%3A%22UA-67003981-5%22%7D%2C%22GoogleTagManager%22%3A%22GTM-MNGXGGB%22%2C%22OLD-Mixpanel%22%3A%7B%22token%22%3A%22b7bc52869761789650547589c1c97344%22%2C%22people%22%3Atrue%7D%7D%2C%22intercom%22%3A%7B%22id%22%3A%22kod1r788%22%2C%22allowAnonymous%22%3Atrue%7D%2C%22rewriteApiUrl%22%3A%7B%22from%22%3A%22https%3A%2F%2Fmy.apify.com%2Fapi%2F%22%2C%22to%22%3A%22https%3A%2F%2Fapi.apify.com%2F%22%7D%2C%22apiServerUrl%22%3A%22https%3A%2F%2Fapi.apify.com%22%2C%22cdnPrefix%22%3A%22https%3A%2F%2Fcdn.apify.com%22%2C%22staticWebUrl%22%3A%22https%3A%2F%2Fapify.com%22%2C%22docsUrl%22%3A%22https%3A%2F%2Fdocs.apify.com%22%2C%22cookieDomain%22%3A%22apify.com%22%2C%22cookieNames%22%3A%7B%22userId%22%3A%22ApifyProdUserId%22%2C%22user%22%3A%22ApifyProdUser%22%7D%2C%22superProxy%22%3A%7B%22hostname%22%3A%22proxy.apify.com%22%2C%22port%22%3A%228000%22%2C%22statusPageUrl%22%3A%22http%3A%2F%2Fproxy.apify.com%22%2C%22googleSerpProxyGroupId%22%3A%22GOOGLESERP%22%7D%2C%22conductor%22%3A%7B%22hostname%22%3A%22runs.apify.net%22%2C%22port%22%3A80%7D%2C%22appBanner%22%3Anull%2C%22userUploadedFilesS3BucketName%22%3A%22apify-uploads-prod%22%2C%22theaterServerMemoryMbytes%22%3A65536%2C%22imageProxyOptions%22%3A%7B%22hmacKey%22%3A%22BUsn3bQLa6wtN9iyQs64at3b%22%2C%22domain%22%3A%22apifyusercontent.com%22%7D%2C%22mixpanelToken%22%3A%226706f12b3a8942be188202d48458aa5b%22%2C%22enableClientDebugLogs%22%3Afalse%7D%2C%22ROOT_URL%22%3A%22https%3A%2F%2Fmy.apify.com%22%2C%22ROOT_URL_PATH_PREFIX%22%3A%22%22%2C%22accountsConfigCalled%22%3Atrue%2C%22autoupdate%22%3A%7B%22versions%22%3A%7B%22web.browser%22%3A%7B%22version%22%3A%2245d4d39e1c0c5679475d46bdb28c75d4b662941f%22%2C%22versionRefreshable%22%3A%2257063c4cf996485c3d1c14b0fc943ec069c52a98%22%2C%22versionNonRefreshable%22%3A%22053bcfd91a068917fd9fbe891cd9c3feb0f0bffb%22%7D%2C%22web.browser.legacy%22%3A%7B%22version%22%3A%223757fa1060d2a68657832aac83619ffa2113a97b%22%2C%22versionRefreshable%22%3A%2257063c4cf996485c3d1c14b0fc943ec069c52a98%22%2C%22versionNonRefreshable%22%3A%22897380d0290904c3f33ff3960c3cd9ae92a38a0c%22%7D%7D%2C%22autoupdateVersion%22%3Anull%2C%22autoupdateVersionRefreshable%22%3Anull%2C%22autoupdateVersionCordova%22%3Anull%2C%22appId%22%3A%225v8kbc7bvh2d1uwv25j%22%7D%2C%22appId%22%3A%225v8kbc7bvh2d1uwv25j%22%2C%22isModern%22%3Afalse%7D"))</script>

  <script type="text/javascript" src="https://cdn.apify.com/280c18e7fd3d10ff3f09510877315f175acff7a7.js?meteor_js_resource=true"></script>


</body>
</html>
我的代码
function runSearch() {
  var formData = {
    initialRequests : 'banks in phoenix',
  };
  var options = {
    'method' : 'post',
    'payload' : formData
  };
  const test = UrlFetchApp.fetch('https://my.apify.com/tasks/<my-task-id>', options);
  Logger.log(test);
}

我需要改变什么?

4

2 回答 2

2

有很多事情你需要改变。

1) 您正在使用您的私人登录 URL - https://my.apify.com/tasks/xLojrg7GEYkQbGBBL。相反,您需要检查正确 URL 上的 API 选项卡以通过 API 调用此任务 - https://api.apify.com/v2/actor-tasks/xLojrg7GEYkQbGBBL/runs?token=YOUR_TOKEN(交换您的 Apify API 令牌从您的帐户标签)

2)您传递查询的字段不被称为initialRequests但是queries。查看您的任务,将您的输入切换为 JSON,您将看到如何在 JSON 中调用这些字段。

3) 不幸的是,目前 Apify 不允许通过单个 API 调用获取数据集数据(例如来自 Google Search Scraper)以进行更长时间的运行。查看这篇解释如何通过 API 集成的文章。

于 2020-04-01T21:17:22.670 回答
1
  1. 获取内容文本HTTPResponse
改变:
Logger.log(test);
至:
Logger.log(test.getContentText());

根据UrlFetchApp文档,fetch()方法返回一个类型为: 的对象HTTPResponse。您希望通过将getContentText()方法应用于HTTPResponse对象来获取内容文本。如下。

// Make a GET request and log the returned content.
var response = UrlFetchApp.fetch('http://www.google.com/');
Logger.log(response.getContentText());
  1. 更改请求参数以符合文档。
改变:
initialRequests : 'banks in phoenix',
至:
queries: 'banks in phoenix',

在此处查看 Google Search Results Scraper 文档。

下表显示了由其输入模式定义的参与者 INPUT 字段的规范。当使用 API 运行 actor 时,可以 [...] 在 JSON 对象中提供这些字段。在文档中阅读更多内容。

...

搜索查询或 URL

Google 搜索查询(例如纽约市的食物)和/或完整 URL(例如https://www.google.com/search?q=food+NYC)。

每行输入一项。

可选
类型:字符串

JSON 示例
"queries": "Hotels in NYC
  Restaurants in NYC
  https://www.google.com/search?q=restaurants+in+NYC"
  1. 因此,总而言之,尝试将您的代码更改为以下内容。
const runSearch = () => {
  const formData = {
    queries: 'banks in phoenix',
  };
  const options = {
    method: 'post',
    payload: formData,
  };
  const test = UrlFetchApp.fetch(
    'https://my.apify.com/tasks/<my-task-id>',
    options,
  );
  const response = test.getContentText();
  Logger.log( 'response\n%s', response, );
}
于 2020-04-01T21:37:26.160 回答