Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

ウェブスクレイピング

$
0
0

概要

CSVに記入したURL一覧からページの情報をスクレイピングします。

ソース

package.json

{
  "name": "scraping",
  "version": "1.0.0",
  "description": "scraping",
  "author": "",
  "devDependencies": {
    "cheerio": "^1.0.0-rc.3",
    "csv-parser": "^2.3.2",
    "fs": "0.0.1-security",
    "json2csv": "^4.5.4",
    "request": "^2.88.0",
    "request-promise": "^4.2.5"
  }
}
  • cheerio ・・・ 読み込んだページをjQuery形式でDOM操作できる
  • csv-parser ・・・ CSV形式をJSONに変換
  • fs ・・・ ファイル操作
  • json2csv ・・・ JSON形式をCSVに変換
  • request ・・・ HTTP通信を行う
  • request-promise ・・・ HTTP通信を行う

url.csv

Yahoo!ニュースの記事情報をスクレイピングします。

url
https://news.yahoo.co.jp/topics/top-picks
https://news.yahoo.co.jp/topics/domestic
https://news.yahoo.co.jp/categories/world

scraping.js

constfs=require('fs');constrequest=require('request');constrp=require('request-promise');constcsv=require('csv-parser');constcheerio=require('cheerio');const{Parser}=require('json2csv');constresults=[];constlist=[];letcount=0;letfilename='dist/data.csv';letloadfile='url.csv';fs.createReadStream(loadfile).pipe(csv()).on('data',function(data){results.push(data);}).on('end',function(){crawl(results[count]);});functioncrawl(result){leturl=result.url;let_include_headers=function(body,response,resolveWithFullResponse){return{response:response,$:cheerio.load(body),body:body};};constoptions={method:'GET',uri:url,json:true,transform:_include_headers,};rp.get(url,options).then((data)=>{scrp(data.$,url,data.response,data.body);}).catch((error)=>{console.log(error);});}functionscrp($,url,response,body){letcategory=$('.newsFeedTab_item-current').text();$('.newsFeed_item').each(function(){lettitle=$(this).find('.newsFeed_item_title').text();letdate=$(this).find('.newsFeed_item_date').text();lethref=$(this).find('.newsFeed_item_link').attr('href');letthumbnail=$(this).find('.thumbnail img').attr('src');if(href!==undefined){letobj={category:category,title:title,date:date,href:href,thumbnail:thumbnail,}list.push(obj);}});count++;console.log('Complete:'+url);if(count<results.length){crawl(results[count]);}else{write();}}functionwrite(){letfields=['category','title','date','href','thumbnail'];constopts={fields};try{constparser=newParser(opts);constcsv=parser.parse(list);fs.writeFile(filename,csv,function(err){if(err)throwerr;});}catch(err){console.error(err);}}

Github


Viewing all articles
Browse latest Browse all 8691

Trending Articles