爬取内容
1. http/axios 等爬取API接口 [#](#t11. http/axios 等爬取API接口)
let axios = require('axios');
axios.get('https://follow-api-ms.juejin.im/v1/getUserFollowInfo?uid=551d6923e4b0cd5b623f54da&src=web')
.then(res => console.log(res.data))
2. superagent/request/crawl爬取HTML页面 [#](#t22. superagent/request/crawl爬取HTML页面)
let request = require('request');
request('https://juejin.im/tag/%E5%89%8D%E7%AB%AF', (err, response, body) => {
let regexp = /class="title" data-v-\w+>(.+?)<\/a>/g;
let titles = [];
body.replace(regexp, (matched, title) => {
titles.push(title);
});
console.log(titles);
});
3. 使用puppeteer控制chromium [#](#t33. 使用puppeteer控制chromium)
puppeteer是Chrome团队开发的一个node库
可以通过api来控制浏览器的行为,比如点击,跳转,刷新,在控制台执行js脚本等等
通过这个工具可以用来写爬虫,自动签到,网页截图,生成pdf,自动化测试等
(async () => { const browser = await puppeteer.launch();//打开浏览器 const page = await browser.newPage();//打开一个空白页 await page.goto('https://www.baidu.com');//在地址栏输入网址并等待加载 await page.screenshot({ path: 'baidu.png' });//截个图 await browser.close();//关掉浏览器 })(); showapi zhangximufeng zxmf2018 const account = `1516383135@qq.com`; const password = `zxmf2018`; (async () => { const browser = await puppeteer.launch({ headless: false });//打开浏览器 const page = await browser.newPage();//打开一个空白页 await page.goto('https://accounts.douban.com/login');//打开豆瓣网站 await page.type('#email', account); await page.screenshot({ path: 'email.png' });//截个图 await page.type('#password', password); await page.screenshot({ path: 'password.png' });//截个图 let src = await page.$eval('#captcha_image', el => el.getAttribute('src')); const captchaText = await readCaptchaImg(src); await page.type('#captcha_field', captchaText); await page.screenshot({ path: 'captcha.png' });//截个图 await page.click('.btn-submit'); await page.waitForNavigation({ waitUntil: 'networkidle2' });//等待页面加载出来,等同于window.onload await page.screenshot({ path: 'welcome.png' });//截个图 await browser.close();//关掉浏览器 })(ret => console.log(ret), error => console.log(err)); function readCaptchaImg(src) { return new Promise(function (resolve, reject) { let options = { url: src, headers: { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" } } let imageStream = fetch(options); var showapiSdk = require('showapi-sdk'); //设置你测试用的appId和secret,img var appId = '72885'; var secret = 'ae08b393b8fa4a1290ab3f700d2c3f95'; //开启debug //showapiSdk.debug(true); if (!(appId && secret)) { console.error('请先设置appId等测试参数,详见样例代码内注释!') return; } //全局默认设置 showapiSdk.setting({ url: 'http://route.showapi.com/184-4',//你要调用的API对应接入点的地址,注意需要先订购了相关套餐才能调 appId: appId,//你的应用id secret: secret,//你的密钥 timeout: 50000,//http超时设置 options: {//默认请求参数,极少用到 testParam: 'test' } }) let request = showapiSdk.request(); request.appendText('typeId', '20'); request.appendText('convert_to_jpg', '0'); request.appendText('needMorePrecise', '0'); request.appendFile('image', { value: imageStream, options: { filename: 'captcha.jpg', contentType: 'image/jpeg' } }); request.post(function (data) { resolve(data.showapi_res_body.Result); }) }); }
#
2.数据持久化- 根据爬取的规则和策略,把爬取到的数据储到数据库中
- 如果要兼容不同的来源,需要对数据需要格式化
- 为不同的数据建立索引方便检索
3. 数据订阅 [#](#t53. 数据订阅)
- 用户可以按照自己的兴趣和需要进行订制内容
4. 分发 [#](#t64. 分发)
有新的数据的时候
- 可以使用邮件推送到订阅者
- 可以使用极光推送等推送服务
- 可以使用及时通信服务向客户端推送
Gitalking ...
Be the first guy leaving a comment!