天のノードjsの爬虫類編15行コード爬取京東資源
4373 ワード
まさか爬虫類は必要なパッケージ である.
爬虫類は、保護メカニズムのあるWebページを取得すると失効する可能性があります.
初入江湖-自在の境編
この
スマート入世-逍遥天境編の上には京東のトップページの画像の内容しか登っていません.もし私の需要がさらに拡大したら、京東のトップページの中の 私たちの を処理します. 上のすべてのロジックは、このとき、前のコードを最適化し、対応するリソースを抽出します.
天井があるevaluate関数内部のconsole.logは印刷できないし、内部で外部の変数を取得できないのでreturnだけが戻る.使用するセレクタはまず対応するインタフェースのコンソールに行ってDOMを選択してから使用できるかどうかを実験しなければならない.例えば、京東はquerySelectorを使用できない.ここでは京東のインタフェースにjQueryが使われているので、jQueryを使ってもいいです.とにかく彼らは使えるセレクタを開発して、私たちは使ってもいいです.そうしないとできません.
威震武林-神遊玄境編
データはこの時代に非常に貴重で、上の2つはいくつかの指定された特定の資源を取得することができて、ホームページの設計ロジックに従って、特定の
転載先:https://juejin.im/post/5c94d9f7e51d4535713ae44c
python
でしかできないのですか?いいえ、私たちの天のNode.js
もできます!Node.js
の最新バージョンダウンロードアドレスNode.js公式サイトnpm
包管理器下载下载最新的官方版本Node.js
会带有npm
npm
のサードパーティ製パッケージpuppeteer
は、対応するjsファイル内でコマンドラインツールnpm i puppeteer -D
を実行する爬虫類は、保護メカニズムのあるWebページを取得すると失効する可能性があります.
初入江湖-自在の境編
const puppeteer = require('puppeteer'); //
(async () => { // async
const browser = await puppeteer.launch(); //
const page = await browser.newPage(); //
await page.goto('https://www.jd.com/'); // 'url'
const result = await page.evaluate(() => { // result src
let arr = []; //
const imgs = document.querySelectorAll('img');
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr
});
await browser.close()
})()
` node `
この
puppeteer
のパッケージは、実は私たちのために別のブラウザを開き、Webページを再開し、データを取得します.スマート入世-逍遥天境編
ラベルに するジャンプページのすべてのtitleの を、 に1つの に します。
をすべて登る必要があります.async
関数は全部で5つのステップに分かれています.puppeteer.launch()
、browser.newPage()
、browser.close()
だけが固定的な書き方です.page.goto
は、どのページに行ってデータを取得するかを指定し、内部urlアドレスを交換したり、この方法を複数回呼び出すことができます.page.evaluate
この関数は、内部では、Webページにアクセスしたいデータロジックpage.goto
とpage.evaluate
の2つの方法は、async
の内部で複数回呼び出すことができ、それは私たちが先に京東のホームページに入って、論理を処理した後、再びpage.goto
という関数を呼び出すことができることを意味し、puppeteer
というパッケージで、見えない場所で別のブラウザを開き、ロジックを処理するので、最終的にはbrowser.close()
メソッドを呼び出してそのブラウザを閉じます. const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.jd.com/');
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll('.cate_menu_lk');
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i < hrefArr.length; i++) {
const url = hrefArr[i];
console.log(url) //
await page.goto(url);
const result = await page.evaluate(() => { // console.log
return $('title').text(); // title
});
arr.push(result) //
}
console.log(arr) // Node.js fs
await browser.close()
})()
天井があるevaluate関数内部のconsole.logは印刷できないし、内部で外部の変数を取得できないのでreturnだけが戻る.使用するセレクタはまず対応するインタフェースのコンソールに行ってDOMを選択してから使用できるかどうかを実験しなければならない.例えば、京東はquerySelectorを使用できない.ここでは京東のインタフェースにjQueryが使われているので、jQueryを使ってもいいです.とにかく彼らは使えるセレクタを開発して、私たちは使ってもいいです.そうしないとできません.
威震武林-神遊玄境編
データはこの時代に非常に貴重で、上の2つはいくつかの指定された特定の資源を取得することができて、ホームページの設計ロジックに従って、特定の
href
のアドレスを選択して、先に直接対応する資源を取得することができて、また再びpage.goto
の方法を使って入ることができて、更にpage.evaluate()
の処理ロジックを呼び出すことができます.ここではあまり紹介しません.結局Node.js
は天に昇ることができて、未来は本当に何でもできるかもしれません.このような良質で短いチュートリアルは、お友達にコレクションしたり転送したりしてください.ありがとうございます.転載先:https://juejin.im/post/5c94d9f7e51d4535713ae44c