Как использоватьNode.Js
а такжеPuppeteer
Сканировать Интернет
оригинал:How To Scrap That Web Page With Node.Js And Puppeteer
автор:Francesco NapoletanoДата выхода: 17.08.2018
Переводчик:Чен ЧанмаоВремя выхода: 20.08.2018
(Пожалуйста, укажите источник)
Если вы похожи на меня,Иногда очень хочется захватить определенную веб-страницу, чтобы получить данные в удобочитаемом формате, или просто нужны данные для других целей.
Я торжественно клянусь, что делаю плохие вещи. (не переводчик)
Я пробовал много раз (например:Guzzle
а такжеBeautifulSoup
д.), и, наконец, нашел оптимальную схему комбинирования:
- Node.js
- Puppeteer (Примечание переводчика: Puppet, является подпроектом Google Chrome, исходный код размещен по адресуGitHub)
- Blackberry Pi для круглосуточной работы скриптов
Puppeteer
ЯвляетсяNode
кодовая база, основанная наDevTools
Протокол, обеспечивающий высокоуровневую автоматизацию API для управления Google.Chrome
илиChromium
браузер.Puppeteer
По умолчанию он работает в режиме без интерфейса, но его также можно настроить для запуска Google в интерфейсном режиме.Chrome
илиChromium
браузер.
что это значит?Вы можете использовать Google в своем сервисеChrome
Экземпляр браузера. Разве это не круто~
Давайте посмотрим, как это сделать.
Настройка операционной среды
Как обычно, откройте терминал, создайте папку проекта и запустите команду во вновь созданной папке.npm init
.
После выполнения команды в папке создается файлpackage.json
документ. Выполнение заказаnpm i -S puppeteer
УстановитьPuppeteer
.
Небольшое предупреждение: установить
Puppeteer
Полная версия Google будет загружена в процессеChromium
браузер вnode_modules
содержание.
не переживай. поскольку1.7.0
версия, Google выпустила новуюpuppeteer-core
Установочный пакет, больше не загружается автоматически Google по умолчаниюChromium
браузер.
Если вы хотите попробовать это, выполните командуnpm i -S puppeteer-core
Вот и все.
puppeteer-core
даPuppeteer
Облегченная версия повторно использует локально установленный браузер или подключается к удаленному браузеру.
Операционная среда готова, поехали!
Перейдите непосредственно к коду и узнайте его
Новое в папке проектаindex.js
файл, скопируйте следующий код и вставьте его вindex.js
в файле.
const puppeteer = require('puppeteer');
const URL = 'https://coding.napolux.com';
puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }).then(async browser => {
const page = await browser.newPage();
await page.setViewport({width: 320, height: 600})
await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 9_0_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A404 Safari/601.1')
await page.goto(URL, {waitUntil: 'networkidle0'});
await page.waitForSelector('body.blog');
await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'})
const result = await page.evaluate(() => {
try {
var data = [];
$('h3.loop__post-title').each(function() {
const url = $(this).find('a').attr('href');
const title = $(this).find('a').attr('title')
data.push({
'title' : title,
'url' : url
});
});
return data; // 返回数组
} catch(err) {
reject(err.toString());
}
});
// 关闭浏览器
await browser.close();
// 记录播客标题
for(var i = 0; i < result.length; i++) {
console.log('Post: ' + result[i].title + ' URL: ' + result[i].url);
}
process.exit();
}).catch(function(error) {
console.error('No way Paco!');
process.exit();
});
Эти коды реализуют функцию сканирования сайта. Полный код проекта размещен по адресуGitHub.
Копни немного глубже и узнай, почему
Приведенный выше код сканирует заголовки и ссылки всех сообщений на моем блоге. Мы модифицировали пользовательский агент (UA), чтобы имитировать процесс сканирования как просмотр старого iPhone.
Для облегчения работы обхода положимjQuery
Встраивается в веб-страницу, чтобы можно было легко использовать селекторы CSS.
Давайте посмотрим на код построчно:
- Строки 1-2: вызов
Puppeteer
модуль, укажите адрес веб-сайта для сканирования. - Строка 4: Выполнить
Puppeteer
. Помните, что мы异步王国
, все операции являются асинхронными, в противном случае это синхронная операция, и вам нужно дождаться окончания операции, прежде чем выполнять следующую строку кода. Как видите, параметры конфигурации говорят сами за себя, наш скрипт гуглится без интерфейсаChromium
работает в браузере. - Строки 5-10: Запустите браузер, откройте веб-страницу, настройте отображение веб-страницы в размере экрана мобильного телефона и настройте браузер на использование поддельного UA. Подождите, пока страница загрузится, пока селектор CSS
body.blog
появляться. - Строка 11: Как и выше, поместите
jQuery
Вводить на веб-страницу. - Линия 13-28: мы используем
jQuery
Мэджик, извлеки нужные нам данные. - Строки 31-37: Закройте браузер. распечатать данные.
Выполнить команду в папке проектаnode index.js
, вы увидите такой вывод:
Post: Blah blah 1? URL: https://coding.napolux.com/blah1/
Post: Blah blah 2? URL: https://coding.napolux.com/blah2/
Post: Blah blah 3? URL: https://coding.napolux.com/blah3/
(Выполнение заказаnode index.js
, переводчик увидит следующий вывод)
Post: How to scrap that web page with Node.js and puppeteer URL: https://coding.napolux.com/how-to-scrap-web-page-nodejs-puppeteer/
Post: How to find ideas for beer money? URL: https://coding.napolux.com/how-to-find-ideas-for-beer-money/
Post: This is the kind of automation I like! URL: https://coding.napolux.com/this-is-the-kind-of-automation-i-like/
Post: Some tips from when you work from home URL: https://coding.napolux.com/some-tips-from-when-you-work-from-home/
Post: How to find a cofounder for your startup URL: https://coding.napolux.com/how-to-find-a-cofounder-for-your-startup/
Post: Software Industry VS anything else URL: https://coding.napolux.com/software-industry-vs-anything-else/
Post: Some of my GitHub repositories URL: https://coding.napolux.com/some-of-my-github-repositories/
Post: How to use Docker for easy and fast WordPress development URL: https://coding.napolux.com/how-to-use-docker-for-wordpress-development/
Описание реферата статьи
Добро пожаловать в мир рептилий. Легче, чем вы думали, верно? Веб-скрапинг — спорный вопрос, помните, что парсить нужно только авторизованные сайты.
Может ли он сканировать ваш сайт? так какВеб-сайтвладелеця не уполномочивал тебя на это.
Оставьте домашнее задание для практики: как его сканировать и использоватьAJAX
страница! 😉