那我們就接著繼續把爬蟲完成
那我們找到每跟分類的頁面,跟我們已經可以完整的把資料拿下來了
就只需要做一些簡單的處理
那我們先再前面新增的類別做修改
class Category {
name: string;
href: string;
posts: Array<Post>;
constructor(name: string, href: string) {
this.name = name;
if (href.substr(0, 1) === "/") href = "https://www.cna.com.tw" + href;
this.href = href;
this.posts = [];
}
public addPost(post: Post) {
this.posts.push(post);
}
public getPosts(): Array<Post> {
return this.posts;
}
}
再新增一個Post的類別
class Post {
title: string;
data: Date;
href: string;
constructor(title: string, date: Date, href: string) {
this.title = title;
this.data = date;
this.href = href;
}
}
接著我們同樣再getCategorySubPost的回圈裡繼續處理資料
//load網頁
let body = await page.content();
//傳給cheerio
let $ = await cheerio.load(body);
await $(
"body div #scrollable div div div.wrapper div.centralContent div.statement ul#myMainList.mainList.imgModule li"
).each((i: number, el: any) => {
let title = $(el)
.find("a div.listInfo h2")
.text();
let date = $(el)
.find("a div.listInfo div.date")
.text();
let href = $(el)
.find("a")
.attr("href");
element.addPost(new Post(title, new Date(date), href));
再這個方法底下記得回傳data
return data;
這樣就完成了
資料長這樣
{
"name": "即時",
"href": "https://www.cna.com.tw/list/aall.aspx",
"posts": [
{
"title": "安倍訪中 謝長廷:密切注意發展",
"data": "2018-10-25T13:48:00.000Z",
"href": "https://www.cna.com.tw/news/aopl/201810250376.aspx"
},
{
"title": "美不派高層參加進博會 中:美企參展數排第3",
"data": "2018-10-25T13:47:00.000Z",
"href": "https://www.cna.com.tw/news/acn/201810250375.aspx"
},
{
"title": "機率1/6700萬 澳業餘高球員單回合兩度一桿進洞",
"data": "2018-10-25T13:40:00.000Z",
"href": "https://www.cna.com.tw/news/aspt/201810250374.aspx"
},
.......