Проблема
По сути, у меня есть небольшая метеорная программа, которая запускает кусок кода кукловода для выполнения поиска в 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, но у нее действительно чистый макет без странных тегов.
Возможные решения
Другие идеи включают в себя:
- Использование вместо этого RSS-канала (но я хотел бы, чтобы данные изображений и описания, которые не включены в RSS-каналы)
- Использование одного из различных API новостей, но они имеют ограниченный лимит запросов, который не соответствует моим бесплатным требованиям
- Используйте API поиска Google, по той же причине, что и выше (я бы превысил 100 запросов в день)
Есть какие-нибудь предложения относительно того, почему у меня могут быть другие результаты?