【Node.js】爬虫--抓取新闻标题、图片、文字描述,支持QQ、iFeng

本文介绍如何使用Node.js编写爬虫,抓取QQ和iFeng网站上的新闻标题、图片及内容描述,涵盖网页数据解析与网络请求技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录
  1. 1. app.js
  2. 2. img-spider.js
  3. 3. img.gallery.js
  4. 4. ifengImgs.js
  5. 5. ifengPictures.js
  6. 6. qqImgs.js
  7. 7. imgs.html

先上效果图:

图片上部分为待解析的网页新闻链接,支持一次输入多个.
图片下部分为解析的进度日志打印。

qq.img.spider02

点击’Commit’之后,对比效果图如下。左边为腾讯新闻原网页,右边为抓取后的整合效果。

qq.img.spider

工程结构:

文件名 描述
app.js 程序启动
img-spider.js 爬虫爬取管理
ifengImgs.js 爬取iFeng下game/fashion的实现
ifengPictures.js 爬取iFeng下game高清图的实现
qqImgs.js 爬取腾讯新闻图的实现
img.gallery.js 爬取图片的汇总
imgs.html 提交爬取链接的html界面

应用到的知识点:

  • express:搭建Web服务
  • cheerio:类似jQuery的快速解析网页工具
  • iconv-lite:解决中文乱码问题
  • 正则表达式:网址匹配、内容匹配/过滤
  • Charles:抓包工具

更多细节看源码吧….

GitHub源码链接:Sodino#ImgSpider


app.js

       
       
       
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
       
       
       
var fs = require( 'fs');
var express = require( 'express');
var img_spider = require( './img-spider.js');
var app = express();
app.get ('/imgs.html', (req, resp) => {
resp.writeHead( 200, { 'Content-Type' : 'text/html'});
resp.write( '<head><meta charset="utf-8"/></head>');
var file = fs.createReadStream( './imgs.html');
file.pipe(resp);
});
app. post ('/imgs.html', (req, resp) => {
req. on( 'data', (data) => {
var content = data.toString();
content = unescape(content);
content = content.replace( 'txtUrls=', '')
//.replace( '/\r/g', '')
//.replace( '/\\r/g', '')
;
var arrUrl = content.split( /\s+/);
var imgSpider = new img_spider();
imgSpider.spider(arrUrl, (err, arrImgGallery) => {
resp.writeHead( 200, { 'Content-Type' : 'text/html'});
resp.write( '<head><meta charset="utf-8"/></head>');
resp.write( '<body>');
if (err) {
var errStr = err.toString();
resp.write(errStr);
resp.write( '</body>');
resp.end();
return;
}
arrImgGallery.forEach((element, index, arrGallery)=>{
var gallery = element;
resp.write( '<p>============================================</p>');
resp.write( '<p>' + gallery.title + '</p>');
var arrImgs = gallery.arrImgs;
arrImgs.forEach((ele, idx, arrImg)=>{
var desc = ele.desc;
var imgUrl = ele.imgBig;
resp.write( '<p>idx=' + idx + "</p>");
resp.write( '<p>' + desc + '</p>');
//<img id= "bigPic" src= "http://img1.gtimg.com/16/1615/161596/16159645_980x1200_0.jpg" style= "opacity: 1;">
resp.write( '<p><img id="bigPic" src="' + imgUrl+ '" style="opacity: 1;"></img></p>');
resp.write( '<p>------------------------</p>');
});
});
resp.write( '</body>');
resp.end();
});
});
});
app. listen (1024);
console. log ('server running on http://localhost:1024/imgs.html');

img-spider.js

       
       
       
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值