实战:爬虫每日日报
笔者认为爬虫是自己至今没有尝试的领域,想做一版与爬虫相关的实战,于是就有了每日日报这一实战
笔者的想法是爬知乎的每天60秒读懂世界 ,网易的365资讯简报,readhub 的 每日早报。然后整合在一起。这一想法主要参考了每日60秒读懂世界-文字版 和前后端均基于 vercel 的每日早报项目
使用技术栈:
typescript 、node serverless、vercel
正文
这样就能让 serverless 下载依赖,如此就能运行自己的爬虫代码
笔者后续改成了 typescript,安装依赖
pnpm i typescript @vercel/node
创建 tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "CommonJS",
"outDir": "dist",
"strict": true,
"esModuleInterop": true
}
}
新建 api 文件夹,并在其中新建 hello.ts
文件
import type { VercelRequest, VercelResponse } from "@vercel/node";
export default function (request: VercelRequest, response: VercelResponse) {
const { name = "World" } = request.query;
response.send(`Hello ${name}!`);
}
启动 vercel ,将其部署到线上
接着本地调试 vercel dev
,如果走的通就部署到线上
- vercel dev:本地调试
- vercel:预览部署到预览线上
- vercel --prod:部署到真正的线上
具体的爬虫代码,其实就是通过 cheerio 进行 API 操作
JS 版本
笔者最开始用 Javascript 来写代码,写完后部署上后,报错
笔者查了下 log,报错信息:Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'axios' ...
原因是node serverless 最开始的时候没有下载 axios 等依赖包,只要在 build 中加上即可:
{
"build": {
"command": "npm install",
"src": "api",
"use": "@vercel/node"
}
}
报错信息:不能用import fetchNews from "../news/zhihu";
,需要给它加上文件后缀,即import fetchNews from "../news/zhihu.js";
写在最后
笔者做这个项目的原因是为了学习node 爬虫,并在 vercel 部署 node serverless 而已
项目地址:https://github.com/johanazhu/readhub-api
预览地址:https://news-xi-ten.vercel.app/api