介紹
來實戰一個案例 因為 政府有提供便民的 http://data.coa.gov.tw/ 所以就試試看把資料爬下來,這樣就可以運用自己想要搜尋的方式去找到自己的資料
效果圖
http://www.giphy.com/gifs/3o751QmrVmrmB7inTi
開始一樣起一個專案 使用 typescript 來製作,好處多多,這個頁面有個分頁 然後有個筆數 第一個動作就是把比數調到最大 所以先調成100筆
await page.goto('http://data.coa.gov.tw/')
await page.waitForSelector('#DefaultPageContent_m_ResultGrid_PageSizeList')
await page.$eval('#DefaultPageContent_m_ResultGrid_PageSizeList', (e: any) => e.value = 100);
接下來開始換頁並爬資料 ,下一步把要解析的先放到
const divsCounts = await page.$$eval('.line', (data: any) => { return data });
import * as puppeteer from 'puppeteer'
import { setTimeout } from 'timers';
import * as fs from 'fs'
(async function go() {
//console.log(MyKey)
const browser = await puppeteer.launch({
headless: false,
args: ['--start-maximized'],
//userDataDir: "./userData/"
});
const page = await browser.newPage();
await page.setUserAgent(`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36`)
console.log('test use agent')
// await watchDog;
let currentScreen = await page.evaluate(() => {
return {
width: window.screen.availWidth,
height: window.screen.availHeight,
};
});
//設定預設網頁頁面大小
await page.setViewport(currentScreen);
// async function parseAndTask(items) {
// }
function rePage() {
}
try {
await page.goto('http://data.coa.gov.tw/')
await page.waitForSelector('#DefaultPageContent_m_ResultGrid_PageSizeList')
await page.$eval('#DefaultPageContent_m_ResultGrid_PageSizeList', (e: any) => e.value = 100);
// let handle = await page.$('#DefaultPageContent_m_ResultGrid_NextPage');
// await handle.click();
let handle: any;
let flag: boolean = true;
//console.log(handle)
let i = 0;
while (flag) {
console.log(i++)
//console.log('here')
try {
var result = await page.waitForSelector('#DefaultPageContent_m_ResultGrid_NextPage', { timeout: 3000 })
handle = await page.$('#DefaultPageContent_m_ResultGrid_NextPage');
await handle.click();
await page.waitForNavigation();
// let listHandle = await page.$$(".line");
//抓取每一頁所有的 tr td欄位
const divsCounts = await page.$$eval('.line', (data: any) => { return data });
//console.log(divsCounts)
//測試時候就會把這個打開抓一頁就好了
//flag = false;
// })
} catch (err) {
flag = false
}
}
console.log('已跳出')
} catch (err) {
console.log('err')
console.log(err)
}
})()
最後一篇來講解析 format
https://github.com/polo13999/getOpenData