第一个nodejs爬虫:爬取豆瓣电影图片

时间:2022-09-22 10:50:36

第一个nodejs爬虫:爬取豆瓣电影图片存入本地:

第一个nodejs爬虫:爬取豆瓣电影图片

首先在命令行下 npm install request cheerio express -save;

代码:

var http = require('https'); //使用https模块
var fs = require('fs');//文件读写
var cheerio = require('cheerio');//jquery写法获取所得页面dom元素
var request = require('request');//发送request请求
var i = 0;
var url = "https://movie.douban.com/subject/1889243/?from=subject-page";
//初始url
function fetchPage(x) { //封装一层函数,方便递归调用
startRequest(x);
} function startRequest(x) {
//采用http模块向服务器发起一次get请求
http.get(x, function(res) { //get到x网址,成功执行回调函数
var html = ''; //用来存储请求网页的整个html内容
res.setEncoding('utf-8'); //防止中文乱码
//监听data事件,每次取一块数据
res.on('data', function(chunk) {
html += chunk;
});
//监听end事件,如果整个网页内容的html都获取完毕,就执行回调函数
res.on('end', function() {
var $ = cheerio.load(html); //采用cheerio模块解析html
var news_item = {
//获取电影的标题
title: $('.related-info h2 i').text().trim(),
//i是用来判断获取页数
i: i = i + 1, }; console.log(news_item); //打印新闻信息
var news_title = $('.related-info h2 i').text().trim(); savedContent($, news_title); //存储每篇文章的内容及文章标题 savedImg($, news_title); //存储每篇文章的图片及图片标题 //下一篇电影的url
nextLink = $(".recommendations-bd dl:last-child dd a").attr('href');
if(i <= 10) { //爬取10页
fetchPage(nextLink);
}
}); }).on('error', function(err) { //http模块的on data,on end ,on error事件
console.log(err);
}); }
//存储标题函数
function savedContent($, news_title) {
$('#link-report span').each(function(index, item) {
var x = $(this).text();
x = x + '\n';
//将新闻文本内容一段一段添加到/data文件夹下,并用新闻的标题来命名文件
fs.appendFile('./data/' + news_title + '.txt', x, 'utf-8', function(err) {
if(err) {
console.log(err);
}
});
})
}
//该函数的作用:在本地存储所爬取到的图片资源
function savedImg($, news_title) {
$('#mainpic img').each(function(index, item) {
var img_title = $('#content h1 span').text().trim(); //获取图片的标题
if(img_title.length > 35 || img_title == "") { //图片标题太长
img_title = "Null";
}
var img_filename = img_title + '.jpg';
var img_src = $(this).attr('src'); //获取图片的url //采用request模块,向服务器发起一次请求,获取图片资源
request.head(img_src, function(err, res, body) {
if(err) {
console.log(err);
}
});
request(img_src).pipe(fs.createWriteStream('./image/' + news_title + '---' + img_filename));
//通过流的方式,把图片写到本地/image目录下,并用标题和图片的标题作为图片的名称。
})
}
fetchPage(url); //主程序开始运行

第一个nodejs爬虫:爬取豆瓣电影图片的更多相关文章

  1. 写一个python 爬虫爬取百度电影并存入mysql中

    目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...

  2. python 爬虫&amp&semi;爬取豆瓣电影top250

    爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...

  3. Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...

  4. python3 爬虫---爬取豆瓣电影TOP250

    第一次爬取的网站就是豆瓣电影 Top 250,网址是:https://movie.douban.com/top250?start=0&filter= 分析网址'?'符号后的参数,第一个参数's ...

  5. Scrapy-redis分布式爬虫爬取豆瓣电影详情页

    平时爬虫一般都使用Scrapy框架,通常都是在一台机器上跑,爬取速度也不能达到预期效果,数据量小,而且很容易就会被封禁IP或者账号,这时候可以使用代理IP或者登录方式爬,然而代理IP很多时候都很鸡肋, ...

  6. Python爬虫爬取豆瓣电影名称和链接,分别存入txt,excel和数据库

    前提条件是python操作excel和数据库的环境配置是完整的,这个需要在python中安装导入相关依赖包: 实现的具体代码如下: #!/usr/bin/python# -*- coding: utf ...

  7. python爬虫-爬取豆瓣电影数据

    #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:27# 文件 :spider_05.py# IDE :PyChar ...

  8. Python爬虫-爬取豆瓣电影Top250

    #!usr/bin/env python3 # -*- coding:utf-8-*- import requests from bs4 import BeautifulSoup import re ...

  9. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

随机推荐

  1. 设置ubuntu 下git 的用户名和邮箱

    设置ubuntu 下git 的用户名和邮箱 摘自  慢慢修远路,上下求索心http://yanshaozhi.iteye.com/blog/386752 虽然我没看怎么明白 但我用第一总方法就设置好了 ...

  2. openfire插件开发之完美开发

    http://redhacker.iteye.com/blog/1919329 一.说在前面 在继上篇Openfire3.8.2在eclipse中Debug方式启动最简单的方式后,我研究了openfi ...

  3. 【转】驱动中的类class和节点

    原文出处:http://blog.chinaunix.net/uid-23036581-id-2230558.html 一个类是一个设备的高级视图, 它抽象出低级的实现细节. 驱动可以见到一个SCSI ...

  4. 【剑指offer 面试题12】打印1到最大的n位数

    思路: 用n位字符数组表示n位数,通过递归的方式逐层(位)遍历,递归终止时打印. #include "stdio.h" #include "string.h" ...

  5. Objective-C 【点语法】

    ------------------------------------------- 点语法的使用 // //  点语法的使用 // //  点语法:   xcode的一种特性,xcode帮我们做代 ...

  6. SQL Server -ISNULL()函数

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  7. redis缓存工具Jedis进行跨jvm加锁(分布式应用)--不幸暂弃用--能够做第三方锁使用

    近期使用redis碰到了多个并发处理同一个缓存的情况.在这样的情况下须要进行加锁机制. 本来想使用java自带的ReadWriteLock进行设置读写锁,这也是上家公司使用的方法. 后来经过商讨,给予 ...

  8. zoj 3822 Domination(2014牡丹江区域赛D称号)

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...

  9. Java compiler 并行编译思考

    一.问题 最近基于JSR269做的代码插桩有一个编译问题需要定位,而且问题不是每次都能复现,需要多编译几次才行,出问题的项目是Maven构建的,相对较大,每次构建耗时就比较长.所以我就想,是否有什么配 ...

  10. 本地导入&sol;导出远程oracle数据库

    1.导出数据库 exp 用户名/密码@远程服务器IP:数据端口号/实例名 file=存储dmp文件的路径 full=y; 2.导入数据库 imp 用户名/密码@远程服务器IP:数据库端口号/实例名 f ...