【问题标题】:Is there any way to scrape Google Search results without getting blocked by Captcha?有没有办法在不被验证码阻止的情况下抓取谷歌搜索结果?
【发布时间】:2020-08-22 19:10:59
【问题描述】:

假设我想从搜索“hi google”中抓取结果(只是一个示例)。我正在使用 Puppeteer 和 Node.js 来抓取。我使用以下代码:

const puppeteer = require('puppeteer');
scrape = async function () {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();
    await page.goto("https://www.google.com/search?q=hi+google&rlz=1C1CHBF_enUS879US879&oq=hi+google&aqs=chrome..69i57j0l3j46j69i60l3.1667j0j7&sourceid=chrome&ie=UTF-8", { waitUntil: "networkidle2" });
    await page.setViewport({ width: 1366, height: 663 });
    await page.waitForSelector('.xpd');
    let data = await page.evaluate(() => {
        
        return document.querySelectorAll('.xpd')[16];

    });
    await browser.close();
    return data;

}
scrape()
    .then(function(result) {
        console.log(result);
    })

当浏览器启动时,它会立即进入一个 reCAPTCHA 页面: 有没有办法超越这个问题?我在网上做了一些研究,但这些结果要么是 1. 非常理论,我不知道如何在我的代码中实现这些结果,要么 2. Python 解决方案,我不确定其中一些解决方案的外观如何傀儡师。我遇到的最有用的结果是随机定时抓取以使请求看起来像人类一样,但正如您所见,即使只检索一个数据元素也无法正常工作,它只会立即将您带到 reCAPTCHA 页面。

谢谢。

【问题讨论】:

  • 设置你的浏览器用户代理
  • @0m3r 感谢您的建议。我试过了,但现在控制台中的输出是{},而不是所需的搜索结果。我什至使用了 puppeteer-extra 但它仍然无法修复。

标签: web-scraping puppeteer recaptcha google-search


【解决方案1】:

这取决于很多因素。

首先,您需要使用puppteer-extra-stealth (https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)。

这个库修补了检测 puppeteer 的最常见方法。

其次,您还想模拟逼真的鼠标移动。我发现库 ghost-cursor 非常适合 (https://github.com/Xetera/ghost-cursor)。

但是,仅此一项是行不通的。您还需要使用无垃圾邮件的住宅代理或理想情况下的 4g 代理。

4g 代理在基于位置和轮换的池系统中工作,并在该区域内该网络上的所有移动数据用户之间共享。

我建议使用https://rsocks.net英国或美国代理 - 或者最好在本地构建自己的 4g 代理以避免任何饱和。

您仍然会遇到一些验证码,因此值得实施诸如 2captcha 之类的解决方案。

为了进一步提高成功率,您需要使用具有历史记录和合法或“农场”活动的 Google 帐户 cookie。

附加到帐户的 cookie 用于正常浏览的次数越多,您的会话就越信任。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-11
    • 2020-05-24
    • 1970-01-01
    • 2021-07-06
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多