精华内容
下载资源
问答
  • node.js爬虫例子

    2017-11-17 08:55:55
    node.js写的2个爬虫例子,一个是用来爬取网站图片,一个是用来爬取龙部落电影下载地址的。例子中主要采用了superagent,cheerio,async框架。
  • 百度爬虫这个词语,一般出现的都是python相关的资料。 py也有很多爬虫框架,比如scrapy,Portia,Crawley等。 之前我个人更喜欢用C#做爬虫。 随着对nodejs的熟悉。发现做这种事情还是用脚本语言适合多了,至少不用写...
  • 本篇文章主要介绍了node.js爬虫爬取拉勾网职位信息的方法。具有很好的参考价值。下面跟着小编一起来看下吧
  • 主要给大家介绍了关于Node.js爬虫如何获取天气和每日问候的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js爬虫具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 一款租房 APP,基于 Node.js 爬虫,爬取 58 同城租房信息,并用地图进行可视化展示,方便用户获取周围租房信息
  • node.js爬取招聘信息
  • 爬取公众号所有文章数据 支持自动识别验证码 离线数据库,包含文章原始信息,文章图片 微信文章预览
  • 本文介绍了Node.js爬虫之网页请求模块,分享给大家,具体如下: 注:如您下载最新的nodegrass版本,由于部分方法已经更新,本文的例子已经不再适应,详细请查看开源地址中的例子。 一、为什么我要写这样一个模块? ...
  • 今天小编就为大家分享一篇关于基于node.js实现爬虫的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 主要介绍了手把手教你用Node.js爬虫爬取网站数据,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • node.js爬虫解决乱码问题 前端学习进程 在爬取出来整个界面之后,可以试着输出看一下整个内容时候是自己想要的,也看看时候出现了乱码问题,解决乱码问题有很多种方法,我当初就试过很多种方法,真正有效的不多,...

    node.js爬虫解决乱码问题

    前端学习进程
    

    在爬取出来整个界面之后,可以试着输出看一下整个内容时候是自己想要的,也看看时候出现了乱码问题,解决乱码问题有很多种方法,我当初就试过很多种方法,真正有效的不多,可能是使用的情况不对吧!

    我看大部分的文章都用到了iconv-lite

    (亲自验证有效)

    var html=[];
    var len = 0;
    res.on('data',function(data){
        html.push(data);
        len += data.length;
    });
    res.on('end',function(){
        var dataAll = Buffer.concat(html,len);
        var strJson = iconv.decode(dataAll,'gb2312');
    })
    

    (会后续补充)

    解析页面用到的是cheerio

    var $ = cheerio.load(html);
    

    具体的页面还得自己去获取有用的内容,就像jQuery一样去获取标签内容什么的,主要还是去看有关文档,根据自己的需求知道相关的API什么的
    通读cheerio API这个文档总结得蛮全面的

    展开全文
  • Node.js爬虫实例及学习笔记,均为亲自编写,正确无误,欢迎下载!
  • electron做的简易磁力搜索(node.js爬虫) electron version:1.4.3 os: deepin15.5 如何运行测试? 第一步:安装electron 第二步:进入package.json所在的目录 第三步:打开终端输入 “electron .”,回车运行
  • Node写一个爬虫脚本每天定时给女朋友发一封暖心邮件
  • 首先,先了解什么是爬虫爬虫的原理和机制是什么。 1。作为前端开发者 我们都知道打开F12可以查看页面的属性。请求某个地址以后会给你返回一个html页面然后在浏览器上加载运行解析成我们可以看到的网页。 2。网页中...

    首先,先了解什么是爬虫。爬虫的原理和机制是什么。

    1。作为前端开发者 我们都知道打开F12可以查看页面的属性。请求某个地址以后会给你返回一个html页面然后在浏览器上加载运行解析成我们可以看到的网页。
    2。网页中一般都夹带着该网站的一些数据信息,比如安居客的有房源信息之类的一些公开数据
    3。这个时候如果需要数据就可以使用爬虫去爬取一些公共数据。爬虫其实就是用代码去模拟人的正常操作

    let request = require('request')
    let cheerio = require('cheerio')
    

    安装两个库 requestcheerio 一个是发送Http请求的一个是用jquery的语法去解析Html文档的

    • 打开安居客,打开F12,看你请求的地址比如:xiangyang.anjuke.com 找到接口地址
    • 在这里插入图片描述
      在这里插入图片描述
      看他返回一个 html文档 往下扒拉你可以看见房源数据。你现在看可以看见总不能拿个笔每个都记下来吧 这个时候就需要爬虫帮个你干活了。
    • 首先 组装http的header 伪装浏览器。在浏览器的请求中会自动给你带上 user-agent属性,该属性主要是告知对方我是浏览器 用的什么系统
    • 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'
    • 而且不光是对user-agent有检测 对cookie也是有进行,如果你在请求的过程中没有带上她的cookie也会检测出来你不是浏览器请求进行封ip处理,这个时候我们就把浏览器的cookie复制出来给组装到我们的header上
    • 'cookie': 'aQQ_ajkguid=D26A0EA3-AFE0-B782-0229-009257B63881; _ga=GA1.2.2004679383.1554945590.....
    • referer属性是告知我的上一级路径是什么,这个我不清楚是否有进行检测。保险起见还是加上比较好
    • 比如:'referer': 'https://xiangyang.anjuke.com/sale/'
    • 在这里插入图片描述
    • 这是我组装headers 里面的东西 你都可以从F12里面的header给复制过来
    • 在这里插入图片描述
    • 就是因为做了这个组装的header 我再去请求别人才知道我是一个浏览器 不是爬虫 伪装成功,接下来就可以去解析返回的Html文档了
    • 由于安居客网站是有反扒机制,所以不能直接对地址进行请求。需要伪装成浏览器进行请求。他可以通过对http header进行检测,如果这个header里面没有带一些浏览器的信息则会被检测出来进行封ip。
    let request = require('request')
    let cheerio = require('cheerio')
    const fs = require("fs")
    const { promises } = require('dns')
    const { resolve } = require('path')
    const { rejects } = require('assert')
    
    // https://xiangyang.anjuke.com/sale/xiangchengbc/p2/
    let opt ={
        url: 'https://xiangyang.anjuke.com/sale/',//请求路径
        method: "GET",//请求方式,默认为get
        gzip:true,
        headers: {//设置请求头
            'content-type': 'text/html; charset=utf-8',
            'authority':'xiangyang.anjuke.com',
            'path':' /sale/xiangchengbc/p2/',
            'scheme':'https',
            'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
            'accept-encoding':'gzip, deflate, br',
            'accept-language':'zh-CN,zh;q=0.9',
            'cache-control':' max-age=0',
            'cookie': 'aQQ_ajkguid=D26A0EA3-AFE0-B782-0229-009257B63881; _ga=GA1.2.2004679383.1554945590; 58tj_uuid=e27e25eb-6064-408d-a651-bbc30786bc25; isp=true; Hm_lvt_c5899c8768ebee272710c9c5f365a6d8=1570773334; id58=e87rkF64xDNPu8IxBAe8Ag==; sessid=56B31019-F035-AA6E-1E4A-0D7A19C2F0F1; lps=http%3A%2F%2Fwww.anjuke.com%2F%3Fpi%3DPZ-baidu-pc-all-biaoti%7Chttps%3A%2F%2Fsp0.baidu.com%2F9q9JcDHa2gU2pMbgoY3K%2Fadrc.php%3Ft%3D06KL00c00f7Hj1f0dNFM00PpAsKZME7X00000FnoxNC00000V2IFCW.THvs_oeHEtY0UWdBmy-bIy9EUyNxTAT0T1dhPHw-ujNhnW0snjwBmWbk0ZRqn1I7PjnsPRD3nRDYfbujwRPArj03PWnLnHf1nHcYwWm0mHdL5iuVmv-b5Hn1PHb1PWbznW0hTZFEuA-b5HDv0ARqpZwYTZnlQzqLILT8my4JIyV-QhPEUitOTAbqR7CVmh7GuZRVTAnVmyk_QyFGmyqYpfKWThnqnHDk%26tpl%3Dtpl_11534_22672_17382%26l%3D1518152595%26attach%3Dlocation%253D%2526linkName%253D%2525E6%2525A0%252587%2525E5%252587%252586%2525E5%2525A4%2525B4%2525E9%252583%2525A8-%2525E6%2525A0%252587%2525E9%2525A2%252598-%2525E4%2525B8%2525BB%2525E6%2525A0%252587%2525E9%2525A2%252598%2526linkText%253D%2525E5%2525AE%252589%2525E5%2525B1%252585%2525E5%2525AE%2525A2-%2525E5%252585%2525A8%2525E6%252588%2525BF%2525E6%2525BA%252590%2525E7%2525BD%252591%2525EF%2525BC%25258C%2525E6%252596%2525B0%2525E6%252588%2525BF%252520%2525E4%2525BA%25258C%2525E6%252589%25258B%2525E6%252588%2525BF%252520%2525E6%25258C%252591%2525E5%2525A5%2525BD%2525E6%252588%2525BF%2525E4%2525B8%25258A%2525E5%2525AE%252589%2525E5%2525B1%252585%2525E5%2525AE%2525A2%2525EF%2525BC%252581%2526xp%253Did%28%252522m3359369220_canvas%252522%29%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FH2%25255B1%25255D%25252FA%25255B1%25255D%2526linkType%253D%2526checksum%253D186%26wd%3D%25E5%25AE%2589%25E5%25B1%2585%25E5%25AE%25A2%26issp%3D1%26f%3D8%26ie%3Dutf-8%26rqlang%3Dcn%26tn%3Dbaiduhome_pg%26inputT%3D2219; twe=2; __xsptplusUT_8=1; _gid=GA1.2.335072086.1592892879; new_uv=14; init_refer=https%253A%252F%252Fsp0.baidu.com%252F9q9JcDHa2gU2pMbgoY3K%252Fadrc.php%253Ft%253D06KL00c00f7Hj1f0dNFM00PpAsKZME7X00000FnoxNC00000V2IFCW.THvs_oeHEtY0UWdBmy-bIy9EUyNxTAT0T1dhPHw-ujNhnW0snjwBmWbk0ZRqn1I7PjnsPRD3nRDYfbujwRPArj03PWnLnHf1nHcYwWm0mHdL5iuVmv-b5Hn1PHb1PWbznW0hTZFEuA-b5HDv0ARqpZwYTZnlQzqLILT8my4JIyV-QhPEUitOTAbqR7CVmh7GuZRVTAnVmyk_QyFGmyqYpfKWThnqnHDk%2526tpl%253Dtpl_11534_22672_17382%2526l%253D1518152595%2526attach%253Dlocation%25253D%252526linkName%25253D%252525E6%252525A0%25252587%252525E5%25252587%25252586%252525E5%252525A4%252525B4%252525E9%25252583%252525A8-%252525E6%252525A0%25252587%252525E9%252525A2%25252598-%252525E4%252525B8%252525BB%252525E6%252525A0%25252587%252525E9%252525A2%25252598%252526linkText%25253D%252525E5%252525AE%25252589%252525E5%252525B1%25252585%252525E5%252525AE%252525A2-%252525E5%25252585%252525A8%252525E6%25252588%252525BF%252525E6%252525BA%25252590%252525E7%252525BD%25252591%252525EF%252525BC%2525258C%252525E6%25252596%252525B0%252525E6%25252588%252525BF%25252520%252525E4%252525BA%2525258C%252525E6%25252589%2525258B%252525E6%25252588%252525BF%25252520%252525E6%2525258C%25252591%252525E5%252525A5%252525BD%252525E6%25252588%252525BF%252525E4%252525B8%2525258A%252525E5%252525AE%25252589%252525E5%252525B1%25252585%252525E5%252525AE%252525A2%252525EF%252525BC%25252581%252526xp%25253Did%28%25252522m3359369220_canvas%25252522%29%2525252FDIV%2525255B1%2525255D%2525252FDIV%2525255B1%2525255D%2525252FDIV%2525255B1%2525255D%2525252FDIV%2525255B1%2525255D%2525252FDIV%2525255B1%2525255D%2525252FH2%2525255B1%2525255D%2525252FA%2525255B1%2525255D%252526linkType%25253D%252526checksum%25253D186%2526wd%253D%2525E5%2525AE%252589%2525E5%2525B1%252585%2525E5%2525AE%2525A2%2526issp%253D1%2526f%253D8%2526ie%253Dutf-8%2526rqlang%253Dcn%2526tn%253Dbaiduhome_pg%2526inputT%253D2219; als=0; new_session=0; ctid=135; _gat=1; wmda_uuid=60169e9bd5e5395ecda466bf092f7a7e; wmda_new_uuid=1; wmda_session_id_6289197098934=1592893057179-bd1c6672-3389-aaa1; wmda_visited_projects=%3B6289197098934; __xsptplus8=8.19.1592892879.1592893104.10%232%7Csp0.baidu.com%7C%7C%7C%25E5%25AE%2589%25E5%25B1%2585%25E5%25AE%25A2%7C%23%23lYUbAxX3aaSpiOkKtNLyO-rIJp0KZUlO%23; xxzl_cid=a3d4cae6516b45ce9178ae2de4ff244c; xzuid=6b8811c7-40d3-444f-98ed-c1b1218c77d9',
            'referer': 'https://xiangyang.anjuke.com/sale/',
            'sec-fetch-dest': 'document',
            'sec-fetch-mode': 'navigate',
            'sec-fetch-site': 'same-origin',
            'sec-fetch-user': '?1',
            'upgrade-insecure-requests': '1',
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'
        }
    }
        let json = []
        let initUrl = 'https://xiangyang.anjuke.com/sale'
        let count = 1
        
        let RequestAnjuke = (opt)=>{
            return new Promise((resolve,rejects) =>{
                request(opt,function(error,response,body){
                    if(error){
                        rejects(error)
                    }
                    resolve(body)
                })
            }).then(body =>{
                let $ = cheerio.load(body)
                $('#houselist-mod-new').find('li').each(function(i,j){
                    let data ={}
                    data.url = $(j).children('.item-img').children('img').attr('src')
                        data.data = {
                            'house-title':$(j).children('.house-details').children('.house-title').text().replace(/\s+/g,""),
                            'house-title-href':$(j).children('.house-details').children('.house-title').children('a').attr('href'),
                            'details-item':$(j).children('.house-details').children('.details-item').text().replace(/\s+/g,""),
                            'house-details':$(j).children('.house-details').children('.details-item1').text().replace(/\s+/g,""),
                            'tags-span':$(j).children('.house-details').children('.tags-bottom').text().replace(/\s+/g,""),
                        }
                    data.price =  $(j).children('.pro-price').children('.price-det').text().replace(/\s+/g,"万")
                    data.average_price = $(j).children('.pro-price').children('.unit-price').text()
                    json.push(data)
                })
                if(count == 50){
                    let house_data = {
                        data:json,
                        len:json.length
                    }
                    fs.writeFile("house_details.txt", JSON.stringify(house_data), error => {
                        if (error) return console.log("写入文件失败,原因是" + error.message);
                        console.log("写入成功");
                    });
                    return 
                }
                count++
                let url = opt.url
                opt.headers.referer = url
                opt.url = initUrl+'/p'+count+'/'
                console.log(opt.url+'----------------------'+opt.headers.referer)
                RequestAnjuke(opt)
                
            }).catch(err =>{
                console.log(err)
            })
        }
    RequestAnjuke(opt)
    

    打开F12查看元素发现了 href的链接就是房源详情的链接地址,这个时候呢。我们就需要用cheerio模块把内容中的url获取出来,这个时候你可以进行直接访问然后拿出来他的详细信息进行组合处理。也可以进行存储来操作,我测试一个一次好像这个链接是有时效性的。所以,在获取出来后尽快进行操作
    在这里插入图片描述

    我用的递归去进行翻页爬取,我手动翻了一共有50页 所以我设置了一个count值进行翻页查询。代码闲下来的时候上传github

    展开全文
  • 遵循 robots.txt 约定的 20000 行 node.js 爬虫。 可以存储用于测试的文件。 用法 实例化 var nodecrawler = require ( 'node-crawler' ) ; var crawler = new nodecrawler . Crawler ( { loadstatic : false , ...
  • nodejs_scraper 在 SSH 上转到 cd /usr/src 和 cd 到 nodejs 应用程序 永远使用来启动/停止节点 js
  • 网站「看知乎」后台爬虫的源码,使用node.js编写
  • 安装node.js,同时安装好依赖: npm install request --save // http请求库 npm install cheerio --save // 分析html工具 npm install express --save // nodejs web框架 获取墨迹天气 地址示例: 东莞 ...

    安装依赖

    安装node.js,同时安装好依赖:

    npm install request --save // http请求库
    npm install cheerio --save // 分析html工具
    npm install express --save // nodejs web框架
    

    获取墨迹天气

    地址示例:
    东莞 https://tianqi.moji.com/weather/china/Guangdong/dongguan
    广州 https://tianqi.moji.com/weather/china/guangdong/guangzhou
    深圳 https://tianqi.moji.com/weather/china/guangdong/shenzhen

    可打开墨迹天气网站找到女朋友对应城市修改url地址拼音即可。

    查看网页结构:


    下面开始提取网页天气信息:

    const request = require("request")
    const cheerio = require("cheerio")
    const weatherURL = 'https://tianqi.moji.com/weather/china/Guangdong/dongguan'
    
    // 获取墨迹天气提示信息
    function getWeatherTips(url) {
        return new Promise((resolve,reject)=>{
        	request(weatherURL,(error,res,body)=>{
        	  if (!error) {
        	    let html = res.body || "";
        		let $ =cheerio.load(html)
        		let temp = $('.wea_weather em').text().trim()+'℃'
        		let desc = $('.wea_weather b').text().trim()
        		let water = $('.wea_about span').text().trim()
        		let win = $('.wea_about em').text().trim()
        		let tips = $('.wea_tips em').text().trim()
        		let words=`今日${city}天气\n${desc}\n温度:${temp}\n湿度:${water}\n风力:${win}\n${tips}`
        		resolve(words)
        	} else {
        		reject(error)
        	}      
          })
       })   
    }
    
    

    获取每日一句

    地址:http://wufazhuce.com/

    const greetingURL = 'http://wufazhuce.com/'
    // 获取wufazhuce.com每日一句
    function getDailyGreeting() {
        return new Promise((resolve,reject)=>{
        	request(greetingURL,(error,res,body)=>{
        		let everyDayWordsList = [];
        		if(!error && res.statusCode==200) {
        			let $ = cheerio.load(res.body.toString())
        				$('div .fp-one-cita a').each(function(item){
        					if($(this).text()){
        						everyDayWordsList.push($(this).text().trim())
        					}           
        				})
        			let result = everyDayWordsList[0] || '网络错误,获取每日问候失败!'
        			resolve(result)    
        		} else {
        			reject(error)				
        		}
        	})
        })
    }
    
    

    计算在一起天数

    // 计算在一起的日子
    function getDiffDate(targetDate) {
        let date1 = new Date(targetDate);
        let date2 = new Date();
        date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
        date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
        const diff = date2.getTime() - date1.getTime();
        const diffDate = diff / (24 * 60 * 60 * 1000);
        return `宝贝,这是我们在一起的${diffDate}天`
    }
    

    接口调用

    var express=require('express');
    var app=express();
    const api = require('./crawer.js')
    app.get('/words',async function(req,res){
       let dateTips = api.getDiffDate()
       let weather  = await api.getWeatherTips()
       let words    = await api.getDailyGreeting()
       let str =`${dateTips}\n${weather}\n${words}`
       res.writeHead(200,  {'Content-Type': 'application/json; charset=utf-8'})
       res.end(str)
    })
    var server = app.listen(8083, function () { // 启动ip和端口
        var port = server.address().port
        console.log("应用实例,访问地址为 http://%s:%s", port)
    })
    

    展开全文
  • 基于Headless Chrome开发分布式爬虫,Distributed crawler powered by Headless Chrome
  • DoubanRent_nodejs_crawler DoubanRent项目的node.js爬虫
  • node.js实现爬虫批量下载图片 node_spider_download-img
  • 3)先安个node.js环境,我用的是0.12.7,更靠后的版本没试过; 4)执行npm -g install forever,安装forever好让爬虫在后台跑; 5)把所有代码整到本地(整=git clone); 6)在项目目录下执行npm install安装依赖库...
  • 之前,算是初步对爬虫有了一定的了解,但爬取的数据没什么意义。最近使用GitHub的频率比较高,所以准备爬取一些GitHub的数据玩下。目前爬取了中国区followers排名前100的大神,以及各种编程语言stars大于1000的开源...
  • cheerio爬虫 git clone https://github.com/JiquanWang99/spider.git 本地测试时使用node 14.8版本 把项目clone到本地之后直接控制台执行npm install / yarn install 安装完依赖以后直接执行命令node getCoupleImg就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,669
精华内容 5,067
关键字:

node.js爬虫

爬虫 订阅