我试图从这个网站immobilienscout24.de使用puppeteer报废数据。我认为这是需要保持会话数据导航网站上的不同页面。以下是我的代码有时一些页面没有加载,并检测到我的请求作为机器人请求。
请看到的代码,并帮助我与会话管理时,网页抓取使用 puppet 。
const puppeteer = require('puppeteer-extra')
const storage = require('node-persist');
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())
const cheerio = require('cheerio')
const pretty = require("pretty");
puppeteer.launch({
headless: false,
args: ["--disable-setuid-sandbox"],
'ignoreHTTPSErrors': true,
executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
userDataDir: '/Users/username/Library/Application Support/Google/Chrome/Default'
}).then(async browser => {
const page = await browser.newPage()
const baseURL = 'https://www.immobilienscout24.de'
for(var p=1; p <= 10; p++) {
await page.goto("https://www.immobilienscout24.de/Suche/de/neubauwohnung-mieten?pagenumber="+p,{
waitUntil: "load"
})
const client = await page.target().createCDPSession();
const cookies = (await client.send('Network.getAllCookies')).cookies;
await page.setCookie(...cookies);
const localStorage = await page.evaluate(() => Object.assign({}, window.localStorage))
const html = await page.content();
const $ = cheerio.load(html);
const tiles = $('.result-list__listing');
tiles.map( async (i, item) => {
let link = $(item).find('a.result-list-entry__brand-title-container').attr('href');
if (link.includes("expose")) {
link = baseURL+link
}
console.log(link)
});
await page.waitForTimeout(10000)
}
await browser.close()
})
1条答案
按热度按时间bq9c1y661#
因为使用的是传统循环,所以您同时发出10个请求:
因此,该网站适当地有一些像速率限制,以防止DDoS攻击,这就是为什么你被检测为机器人。
使用ES6,您可以请求10次,但顺序如下:
希望它有所帮助!