首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Unirest块返回的空响应

从Unirest块返回的空响应
EN

Stack Overflow用户
提问于 2022-01-25 18:27:30
回答 1查看 99关注 0票数 1

我正试图用Unirest和Cheerio搜索谷歌的搜索结果。所以在这里,我试图得到这个刮过的标题数组。但是,当我在外部安慰它时,它什么也不返回,而当我在Unirest块中安慰它时,它返回给我数据。

这是我的代码:

代码语言:javascript
复制
const unirest = require('unirest')
const cheerio = require('cheerio')


var titles = []
unirest
.get('https://www.google.com/search?q=oxylabs')
.headers({'Accept': 'application/json', 'Content-Type': 'application/json'})
.proxy(proxy)//hided
.then((response) =>
{
    const $ = cheerio.load(response.body)

      $('.uEierd').each((i,el) =>
      {
        titles[i] = $(el)
        .find('.ZINbbc div.v5yQqb a.cz3goc div.CCgQ5 span')
        .text()

        
      })
})

for (let i = 0; i < titles.length; i++)
{
    
    console.log(titles[i]);
    
} 
EN

回答 1

Stack Overflow用户

发布于 2022-05-11 10:16:55

您的代码无法工作,因为unirest是异步的,并且运行在for循环之后。代码以及在线IDE中的完整示例

代码语言:javascript
复制
const unirest = require("unirest");
const cheerio = require("cheerio");

function getData() {
  return new Promise((resolve, reject) => {
    const titles = [];
    unirest
      .get("https://www.google.com/search?q=oxylabs")
      .headers({
        "Accept": "application/json",
        "Content-Type": "application/json",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"
      })
      // .proxy(proxy) //hided
      .then((response) => {
        const $ = cheerio.load(response.body);

        $(".uEierd").each((i, el) => {
          titles[i] = $(el).find(".v0nnCb span").text();
        });
        resolve(titles);
      })
      .catch((error) => {
        console.error(error);
        reject(error);
      });
  });
}

function logData() {
  getData().then((titles) => {
    for (let i = 0; i < titles.length; i++) {
      console.log(titles[i]);
    }
  });
}

logData();

输出:

代码语言:javascript
复制
Oxylabs Premium Proxies - Residential Proxy Network
72M+ Residential IPs Network - 7 Day-Free Trial - Join Now

或者,您可以使用来自SerpApi的SerpApi。如果您不想知道如何解决captchas、旋转代理、从头创建解析器并维护它,API方法就更容易了。有关更多信息,请查看游乐场

用法:

代码语言:javascript
复制
const SerpApi = require("google-search-results-nodejs");
const mySecret = process.env['API_KEY']     //your API key from serpapi.com 
const search = new SerpApi.GoogleSearch(mySecret);

const params = {
  engine: "google",                         // search engine 
  q: "oxylabs",                             // search query
  location: "Austin, Texas, United States", // location parameter
  google_domain: "google.com",              // google domain of the search
  gl: "us",                                 // contry of the search
  hl: "en",                                 // language of the search  
};

const getAdTitles = function (data) {
  const titles = [];
  const adResults = data.ads;
  adResults?.forEach((result) => {
    const { title } = result;
    titles.push(title);
  });
  console.log(titles);
};

search.json(params, getAdTitles);

输出:

代码语言:javascript
复制
[
  'Oxylabs Premium Proxies - Residential Proxy Network',
  '72M+ Residential IPs Network - 7 Day-Free Trial - Join Now'
]

免责声明,我为SerpApi工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70853810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档