Поиск Google с помощью Puppetter в Meteor Galaxy возвращает другой контент, чем при локальном запуске - PullRequest
0 голосов
/ 07 апреля 2020

Проблема

По сути, у меня есть небольшая метеорная программа, которая запускает кусок кода кукловода для выполнения поиска в Google:

  const url = 'https://www.google.com/search?q=test&tbm=nws'
  const browser = await puppeteer.launch({
    args: ['--no-sandbox', '--disable-setuid-sandbox'],
  })
  const page = await browser.newPage()

  await page.setUserAgent(
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
  )

  const response = await page.goto(url, { waitUntil: 'networkidle0' })
  const content = await page.content()

  console.debug('---------------TEST--------------')
  console.log(content.includes('class="g"'))
  console.log(response)
  console.log(content)
  console.debug('---------------TEST Done--------------')

  await browser.close()

Когда я запускаю эту программу локально, я получаю правильно загруженная страница поиска Google. На этой странице все результаты обернуты в div с классом 'g', что облегчает анализ.

Когда я внедряю этот же код на серверах galaxy.meteor, этот код возвращает неправильно загруженный поиск Google стр. Результаты не имеют этого красиво оформленного div, но имеют совершенно другой макет и имеют пользовательские элементы, такие как g-card, g-img et c. Похоже, что данные действительно есть, но они определенно запутаны.

То, что я пытался

Я знаю, что это, скорее всего, сделано специально Google, что имеет смысл, но Мне интересно, почему я получаю разные результаты при выполнении одного и того же сценария локально против сервера.

Я думал, что это может быть связано с отсутствием настроек кукловода, таких как настройка пользовательского агента, но это не дало лучших результатов.

Я думал, что это также может быть связано с динамически загружаемыми сценариями. Я отключил js в браузере, который НЕ ДЕЛАЕТ , загружает красивую логику обертки c, но у нее действительно чистый макет без странных тегов.

Возможные решения

Другие идеи включают в себя:

  1. Использование вместо этого RSS-канала (но я хотел бы, чтобы данные изображений и описания, которые не включены в RSS-каналы)
  2. Использование одного из различных API новостей, но они имеют ограниченный лимит запросов, который не соответствует моим бесплатным требованиям
  3. Используйте API поиска Google, по той же причине, что и выше (я бы превысил 100 запросов в день)

Есть какие-нибудь предложения относительно того, почему у меня могут быть другие результаты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...