使用NodeJS进行Web抓取入门教程[阿部寛]
首先
因为在大学研究期间遇到了一些问题,现在似乎要尝试用Node.js来进行网络爬虫,所以这是关于那个的备忘录。
作为入门,我希望从阿部寛的个人网站上获取阿部寛的图片。
爬虫是什么?
首先,我对”スクレイピング”这个词感到困惑,所以进行了调查。据说它的意思是从网页中提取信息。使用情况上,当我想获取网站上的信息,或者没有API但网页上有信息时,我可以使用”スクレイピング”来搜集信息。
阿部寛是谁?
上田次郎教授是出演过《罗马浴场》等作品的日本演员,同时也是日本科学技术大学理工学部的教授。为何他没有尽力呢?他拥有如此惊人的官方网站,经常被用作信息类实验的素材(?)。
可以做的事情 (Kě yǐ zuò de
可以从Node.js访问阿部寛的网站并获取阿部寛的照片。
使用过的东西
-
- nodejs
- yarn
完成的东西
让我们先获取HTML数据吧!
-
- axios使って阿部寛のHTMLぶんどります
- なのでaxiosとasyncをyarn addで入れていって、以下のコードを作成します
// ajax関係
const axios = require("axios");
// 阿部寛のサイト
const url = "http://abehiroshi.la.coocan.jp/";
const main = async () => {
const data = await axios.get(url);
console.log(data.data);
}
main();
-
- これでできますめ!!!!
- 結果がこんな感じです!!
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta name="GENERATOR" content="JustSystems Homepage Builder Version 20.0.6.0 for Windows">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>�������̃z�[���y�[�W</title>
</head>
<frameset cols=18,82>
<frame src="menu.htm" marginheight="0" marginwidth="0" scrolling="auto" name="left">
<frame src="top.htm" marginheight="0" marginwidth="0" scrolling="auto" name="right">
<noframes>
<body></body>
</noframes>
</frameset>
</html>
- うおおおやったぜ!!
获取所需的信息!
-
- 今度はFast HTML Parserを使って必要な情報取り出します、
-
- のでyarn addでぶちこみます
-
- 卒研では画像はURLでほしいので、文字列データ分捕れそうなのでいきます、許して
- とりあえず動かせるようにしたものがこれです
// ajax関係
const axios = require("axios");
// 阿部寛のサイト
const url = "http://abehiroshi.la.coocan.jp/";
// パーサ
const HTMLparser = require('fast-html-parser');
const main = async () => {
const data = await axios.get(url);
console.log(data.data);
const root = HTMLparser.parse(data.data);
console.log(root.firstChild.structure);
}
main();
- 結果がこれです
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta name="GENERATOR" content="JustSystems Homepage Builder Version 20.0.6.0 for Windows">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>�������̃z�[���y�[�W</title>
</head>
<frameset cols=18,82>
<frame src="menu.htm" marginheight="0" marginwidth="0" scrolling="auto" name="left">
<frame src="top.htm" marginheight="0" marginwidth="0" scrolling="auto" name="right">
<noframes>
<body></body>
</noframes>
</frameset>
</html>
html
head
meta
meta
meta
title
#text
frameset
frame
frame
noframes
body
-
- たぶんできた!!!
-
- 阿部寛のサイトはサイトを分割してそれをframesetで表示してる感じですね、
-
- menuはたぶん右側のメニューだと思われます、
-
- 阿部寛の顔面はtopのほうにあると予想されるので、そっちをみましょ、
-
- なのでtopの方をaxiosで表示してみます!!
- コードは以下です
// ajax関係
const axios = require("axios");
// 阿部寛のサイト
const url = "http://abehiroshi.la.coocan.jp/top.htm";
// パーサ
const HTMLparser = require('fast-html-parser');
const main = async () => {
const data = await axios.get(url);
console.log(data.data);
}
main();
- 結果はこんな感じです!!
<!-- saved from url=(0022)http://internet.e-mail -->
<!-- saved from url=(0022)http://internet.e-mail -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="GENERATOR" content="JustSystems Homepage Builder Version 20.0.6.0 for Windows">
<title>���� ���̃z�[���y�[�W</title>
</head>
<body background="image/abehiroshi.jpg">
<br>
<h1 align="center">���� ���̃z�[���y�[�W</h1>
<table align="center">
<tr>
<td rowspan="2"><img src="abe-top-20190328-2.jpg" width="350" height="414" border="0"><br>
<br>
<table width="256">
<tr>
<td width="14"> </td>
<td width="230">���� ���i���� �Ђ낵�j<br></td>
</tr>
<tr>
<td> </td>
<td>���N���� 1964�N6��22��<br></td>
</tr>
<tr>
<td> </td>
<td>���t�^ A�^<br></td>
</tr>
<tr>
<td> </td>
<td><a href="prof/prof.htm">�v���t�B�[��</a></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td colspan="2"><br>
If you have any enquiries regarding my TV drama or film, or would like to make an enquiry concerning future projects, please do not hesitate to contact me through the following email address.<br>
<br>
mail:<a href="mailto:shigeta@navy.plala.or.jp">shigeta@navy.plala.or.jp</a></td>
</tr>
</table>
<br>
����<strong>:</strong><br>
�Γc�I�t�B�X<br>
107-0052<br>
�����s�`��ԍ�9-5-29 <br>
�ԍ�C�����}���V����303<br>
TEL : +81-3-5410-8585<br>
FAX : +81-3-5410-0588 </td>
<td> </td>
<td><div align="center">�������@�ŐV���@������</div></td>
</tr>
<tr>
<td></td>
<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left" valign="bottom"><hr width="100%" size="1"></td>
</tr>
</table>
<!-- start�@-->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left" valign="top"><strong>�E�h���}</strong></td>
</tr>
</table>
<table border="0" cellspacing="5" cellpadding="0">
<tr>
<td width="70" align="left" valign="top"> </td>
<td>
<strong>
<a href="https://www.tbs.co.jp/dragonzakura/" target="_blank">�u�h���S����2�v</a>(��)<font color="#ff0000"></font><br>
<font color="#ff0000">2020�N�Ă�\�肵�Ă���܂������A�V�^�R���i�E�C���X�����g��̉e���ɂ��������������肢�����܂����B</font></strong></td>
</tr>
</table>
<!-- end�@-->
<!-- start�@-->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left" valign="bottom"><hr width="100%" size="1"></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left" valign="top"><strong>�E�f��</strong></td>
</tr>
</table>
<table border="0" cellspacing="5" cellpadding="0">
<tr>
<td width="70" align="left" valign="top"> </td>
<td>
<strong>�u����Ȃ������҂����ցv <br>
2021�N���J�\��<br>
</strong></td>
</tr>
</table>
<table border="0" cellspacing="5" cellpadding="0">
<tr>
<td width="70" align="left" valign="top"> </td>
<td>
<strong><br>
<a href="http://www.hokusai2020.com/" target="_blank">�uHOKUSAI�v</a> <br>
2021�N ���J�\��<br>
<font color="#ff0000">�����J�������ɂȂ�܂����B</font><br>
</strong></td>
</tr>
</table>
<table border="0" cellspacing="5" cellpadding="0">
<tr>
<td width="70" align="left" valign="top"></td>
<td></td>
</tr>
</table>
<!-- end�@-->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left" valign="bottom"><hr width="100%" size="1"></td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</td>
</tr>
</table>
</body>
</html>
-
- 見た感じ阿部寛の顔面画像はある感じがしますね!!ビンゴ!!!!
-
- そこから画像のURLとりましょ!!
- とりあえずコードはこんな感じです!!
// ajax関係
const axios = require("axios");
// 阿部寛のサイト
const url = "http://abehiroshi.la.coocan.jp/top.htm";
// パーサ
const HTMLparser = require('fast-html-parser');
const main = async () => {
const data = await axios.get(url);
const root = HTMLparser.parse(data.data);
console.log(root.querySelectorAll('img'));
}
main();
- 結果はこんな感じです!!
[
HTMLElement {
tagName: 'img',
rawAttrs: 'src="abe-top-20190328-2.jpg" width="350" height="414" border="0"',
childNodes: [],
classNames: []
}
]
-
- rawAttrsに顔面画像らしきURLがありますね!!
-
- あとはそれをとって気合いでとっていきます!!
- コードはこんな感じです!!
// ajax関係
const axios = require("axios");
// 阿部寛のサイト
const url = "http://abehiroshi.la.coocan.jp/top.htm";
// パーサ
const HTMLparser = require('fast-html-parser');
const main = async () => {
const data = await axios.get(url);
const root = HTMLparser.parse(data.data);
const raw_data = root.querySelectorAll('img')[0].rawAttrs;
const img_url = raw_data.split("\"")[1];
console.log(img_url);
}
main();
- 結果はこんな感じです!!
abe-top-20190328-2.jpg
- ぶんどれたやった!!
存储图像
-
- あとは画像を保存するだけですね、、
-
- nodejsで画像保存はjimpが良さそうなのでyarn addでjimpをいれます
- あとは以下のコードで行きます!!
// jimp関係
const jimp = require("jimp");
const main = () => {
jimp.read("http://abehiroshi.la.coocan.jp/abe-top-20190328-2.jpg", (err, abehiroshi) => {
if(err) return;
abehiroshi.write("abehiroshi.jpg");
});
}
main();
- これであなたのPCに阿部寛が住み着きましたね!!
结束
-
- 酔ってます
-
- あとたっくーさんの発狂している動画やUber eartsにぶちぎれる動画をループで見ていながら書いてます、ごめんなさい
- ボスに見られなければいいやって思ってます
给你一个额外的小礼物
- このコードで阿部寛がいっぱい!!
// jimp関係
const jimp = require("jimp");
const size = 100000000000000000000000000000000;
const main = () => {
jimp.read("http://abehiroshi.la.coocan.jp/abe-top-20190328-2.jpg", (err, abehiroshi) => {
if(err) return;
for(let i = 0;i < size;i++) {
abehiroshi.write("abehiroshi_"+i+".jpg");
}
});
}
main();
请向以下内容作为参考
-
- https://wa3.i-3-i.info/word12494.html
-
- http://abehiroshi.la.coocan.jp/
-
- https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E3%81%AE%E7%99%BB%E5%A0%B4%E4%BA%BA%E7%89%A9
- https://qiita.com/ledsun/items/0965a60f9bdff04f2fa0