рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдпрд╣ рд╢рдмреНрдж рдЖрдорддреМрд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЬ рд╣рдо рдЧреБрдордирд╛рдо рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдЯреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЧреБрдордирд╛рдореА рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдореЗрдВ рдХрдИ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:- рдХрдардкреБрддрд▓реА - рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред
- Cheerio - HTML рдХреЛрдб рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- рдЯреЙрд░ - рдПрдХ рдЕрд▓рдЧ рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рдХреЗ рдХрд╛рдиреВрдиреА рдкрд╣рд▓реВ рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рдЕрдХреНрд╕рд░ рдЕрд╕реНрдкрд╖реНрдЯ рдореБрджреНрджрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЗ " рдЙрдкрдпреЛрдЧ рдХреА рд╢рд░реНрддреЛрдВ " рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░реЗрдВ, рдЬрд┐рдирдХреЗ рдбреЗрдЯрд╛ рдЖрдк рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рдЕрдЪреНрдЫреА рд╕рд╛рдордЧреНрд░реА рд╣реИред
рддреЛрд░ рд╕реНрдерд╛рдкрдирд╛
рдЖрдЗрдП рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЛрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:sudo apt-get install tor
рддреЛрд░ рд╕реЗрдЯрдЕрдк
рдЕрдм рдЯреЛрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдЯреЙрд░ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди SOCKS рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рдЬреЛ рд╣рдореЗрдВ рдПрдХрд▓ рдЖрдЙрдЯрдкреБрдЯ рдиреЛрдб (рдпрд╛рдиреА, рдПрдХ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕) рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рджреЗрддрд╛ рд╣реИред рдЯреЛрд░ рдХреЗ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рдирд╛, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдлрд┐рдЯ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреБрдЫ IP рдкрддреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдкрдХреЛ рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛редTor рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░, рд╣рдо рдХреЗрд╡рд▓ SOCKS рдХрдиреЗрдХреНрд╢рди рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЛрд░реНрдЯ рдЦреЛрд▓рддреЗ рд╣реИрдВред рдпрд╣ SocksPort
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ /etc/tor
ред рдХреБрдЫ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗрдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ /etc/tor/torrc
рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:# 4 SOCKS-, Tor-.
SocksPort 9050
SocksPort 9052
SocksPort 9053
SocksPort 9054
рдпрд╣рд╛рдБ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:SocksPort
. тАФ , , SOCKS, .SocksPort
, , , - .9050
тАФ , Tor- .9051
. Tor , , , Tor.9051
, , 1.
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЛрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ:sudo /etc/init.d/tor restart
рдПрдХ рдирдпрд╛ Node.js рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБред рдЪрд▓реЛ рдЙрд╕реЗ рдмреБрд▓рд╛рдУ superWebScraping
:mkdir superWebScraping
рдЖрдЗрдП рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдиреЛрдб рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ:cd superWebScraping && npm init -y
рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:npm i --save puppeteer cheerio
Puppeteer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
Puppeteer рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИ рдЬреЛ рдХреНрд░реЛрдо рдпрд╛ рдХреНрд░реЛрдорд┐рдпрдо рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DevTools рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред рдЯреЛрд░-рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЬреИрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд┐рдВрдЧрд▓-рдкреЗрдЬ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрд┐рдирдХреА рд╕рд╛рдордЧреНрд░реА рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИред рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдбрд╛рд▓реЗрдВред рдЗрд╕ рдХреЛрдб рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВредindex.js
const puppeteer = require('puppeteer');
async function main() {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto('https://api.ipify.org');
setTimeout(() => {
browser.close();
}, 3000);
}
main();
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рдореНрди рдХрдорд╛рдВрдб рд╕реЗ рдЪрд▓рд╛рдПрдБ:node index.js
рдЙрд╕рдХреЗ рдмрд╛рдж, рдХреНрд░реЛрдорд┐рдпрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдкрддрд╛ рдЦреБрд▓рд╛ рд╣реЛ https://api.ipify.org
редрдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ, рдЯреЛрд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдореИрдВрдиреЗ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдареАрдХ рд╕реЗ рдЦреЛрд▓рд╛https://api.ipify.org
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреГрд╖реНрда рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдкрддрд╛ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдкрддрд╛ рд╣реИ рдЬреЛ рдЙрди рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рджреМрд░рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛рддреНрд░рд╛ рдХрд░рддрд╛ рд╣реВрдВредрдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рдореНрди рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдХрд░ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдмрджрд▓реЗрдВpuppeteer.launch
:
const browser = await puppeteer.launch({
headless: false,
args: ['--proxy-server=socks5://127.0.0.1:9050']
});
рд╣рдордиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рддрд░реНрдХ рджрд┐рдпрд╛ --proxy-server
ред рдЗрд╕ рддрд░реНрдХ рдХрд╛ рдорд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рд╣рдорд╛рд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓ рд░рд╣реЗ рдПрдХ рдореЛрдЬреЗ 5 рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдФрд░ рдкреЛрд░реНрдЯ рдкрд░ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП 9050
ред рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдЙрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдерд╛ torrc
редрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБ:node index.js
рдЗрд╕ рдмрд╛рд░, рдЦреБрд▓реЗ рдкреГрд╖реНрда рдкрд░, рдЖрдк рдПрдХ рдЕрд▓рдЧ рдЖрдИрдкреА рдкрддрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рдкрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЛрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдЗрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ, рдЯреЛрд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рдкрддрд╛ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛144.217.7.33
ред рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рджреВрд╕рд░рд╛ рдкрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реА рдкреЛрд░реНрдЯ рдирдВрдмрд░ (9050
) рдХрд╛рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╡рд╣реА рдЖрдИрдкреА рдкрддрд╛ рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдорд┐рд▓рд╛ рдерд╛редрдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рдЯреЛ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЯреЛрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╣рдордиреЗ рдХрдИ рдкреЛрд░реНрдЯ рдЦреЛрд▓реЗред рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд░реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛редCheerio рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреГрд╖реНрдареЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рд╣реИ, рдпрд╣ рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪреАрдпрд░рд┐рдпреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ ред рдпрд╣ рдПрдХ HTML рдкрд╛рд░реНрд╕рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдПрдкреАрдЖрдИ рдЙрд╕реА рддрд░рд╣ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ jQuery рдПрдкреАрдЖрдИ ред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИрдХрд░ рдиреНрдпреВрдЬрд╝ рдкреЗрдЬ рд╕реЗ 5 рдирд╡реАрдирддрдо рдкреЛрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред рд╣реИрдХрд░ рдиреНрдпреВрдЬрд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВ редрд╣реИрдХрд░ рд╕рдорд╛рдЪрд╛рд░ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╣рдо рдЦреБрд▓реЗ рдкреГрд╖реНрда рд╕реЗ 5 рддрд╛рдЬрд╛ рд╕реБрд░реНрдЦрд┐рдпрд╛рдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрдм рдпрд╣ рдПрдЪрдПрдХреЗрдПрдордИрдПрдо (1972) рд╣реИ, рд▓реИрд░реА рд░реЙрдмрд░реНрдЯреНрд╕ рдХреА рдореГрддреНрдпреБ рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдЕрдиреНрдп)ред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЗрдЦ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖рдХ рдХреЛ рдПрдХ HTML рддрддреНрд╡<a>
рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рдерд░рдЦрд╛ рдЧрдпрд╛ рд╣реИstorylink
редрджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛рдкреГрд╖реНрда рдХреЗ HTML рдХреЛрдб рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:- рдЯреЛрд░ рдкреНрд░реЙрдХреНрд╕реА рд╕реЗ рдЬреБрдбрд╝реЗ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рдХрд░рдирд╛ред
- рдПрдХ рдирдпрд╛ рдкреЗрдЬ рдмрдирд╛рдПрдБред
- рдкрддреЗ рдкрд░ рдЬрд╛рдПрдВ
https://news.ycombinator.com/
ред - рдкреГрд╖реНрда рдХреА HTML рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
- рдкреГрд╖реНрда рдХреА HTML рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИ
cheerio
ред - рд▓реЗрдЦ рд╢реАрд░реНрд╖рдХ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдирд╛ред
- рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдирд╛
storylink
ред cheerio
рд╕реНрд▓рд╛рдЗрд╕ () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ 5 рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ редcheerio
рдкреНрд░рддреНрдпреЗрдХ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд░рд┐рдгрд╛рдореА рддрддреНрд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ ред- рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рд▓рд┐рдЦреЗрдВред
рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ рдХрд┐ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:const puppeteer = require('puppeteer');
const cheerio = require('cheerio');
async function main() {
const browser = await puppeteer.launch({
headless: true,
args: ['--proxy-server=socks5://127.0.0.1:9050']
});
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com/');
const content = await page.content();
const $ = cheerio.load(content);
const titles = [];
$('.storylink').slice(0, 5).each((idx, elem) => {
const title = $(elem).text();
titles.push(title);
})
browser.close();
console.log(titles);
}
main();
рдпрд╣рд╛рдБ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИредрдкрд╣рд▓реЗ 5 рд╣реИрдХрд░ рд╕рдорд╛рдЪрд╛рд░ рд╕реБрд░реНрдЦрд┐рдпреЛрдВ рдореЗрдВ рдкреЗрдЬ рдХреЛрдб рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рдХрд╛рд▓реЗ рдЧрдПрдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ
рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рднрд┐рдиреНрди SOCKS рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ torrc
ред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╣рдо рдПрдХ рдРрд░реЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдлрд╝рдВрдХреНрд╢рди main()
рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓реЗрдВ scrape()
рдФрд░ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд main()
рдХрд░реЗрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ scrape()
, рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛редрдпрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рдХреЛрдб рд╣реИ:const puppeteer = require('puppeteer');
const cheerio = require('cheerio');
async function scrape(port) {
const browser = await puppeteer.launch({
args: ['--proxy-server=socks5://127.0.0.1:' + port]
});
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com/');
const content = await page.content();
const $ = cheerio.load(content);
const titles = [];
$('.storylink').slice(0, 5).each((idx, elem) => {
const title = $(elem).text();
titles.push(title);
});
browser.close();
return titles;
}
async function main() {
const ports = [
'9050',
'9052',
'9053',
'9054'
];
while (true) {
for (const port of ports) {
console.log(await scrape(port));
}
}
}
main();
рд╕рд╛рд░рд╛рдВрд╢
рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЧреБрдордирд╛рдо рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВредрдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рдХрд┐рдпрд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред