如何实现今日热榜这种排行网站?
注意:以下探讨的方法和代码,全是个人推测,与他人无关。
“今日热榜”都知道吧? 就是你经常上班摸鱼的地方,类似的还有“鱼塘”,实现的核心就是“爬”。关于爬虫我之前写过一篇《nodejs抓取网站图片和文字》,使用node爬取了本博客图片和内容。今天在这个基础上,再尝试写一个外网版的今日热榜,去爬取国外网站的聚合网站,暂且命名“今日外网热搜榜” 。
首先定几个目标
- 目标是外国网站,要能翻,
- 上线后不需要人工参与,实现自动抓取,
- 定时任务,按时更新
技术选型
后端:爬虫Node+cheerio
前端:php(简单粗暴混合渲染)
管理端:php + mySql(能对网站及抓取内容进行人工监管)
实现思路
1. 墙
本地:request
模块配置好proxy
属性,具体请看官方文档。
线上:使用国外服务器
2. 爬取
node爬虫写法简单易上手,操作数据库也很轻松,特别适合这种简单粗暴的爬取任务。我以抓取台湾Mobile 01论坛“热门文章”栏目为例,地址 https://www.mobile01.com/hottopics.php 。F12肉眼分析网站html结构,使用cheerio提供类似jQuery方式的选择器,这对前端来说是逆天的好工具。接下来要做的就是提取标题、url等字段,存入数据库即可。
当然,有些网站可能会有不同的反爬策略,比较常见的是大家熟知的cloudflare 5秒金盾。反反爬不是本文要讨论的点,我也不是专家。只有特殊网站特殊处理,比如Mobile 01就使用了cloudflare,直接爬大概率会受阻,但它的移动端网页是没有金盾的。又比如有些网站,比如Reddit,网页结构复杂,且使用随机css类名,无法长期固定抓取,但它却提供了api让人调用。
3. 入库
今日热榜 有完整的登录、订阅等个性化功能。这些都不是必须的,我只需要直接展示爬取内容,因此数据库只需要两张表:网站信息表、新闻内容表。后端我是外行,就不细谈了。
4. 定时更新
你以为会有什么高科技? 并没有。拿起setInterval就是干。因为我的服务器提供了定时执行任务功能,我连setInterval都可以省了。(是的,本文就是这么水)
5. 展示
鉴于SEO以及懒,前端我直接使用php混合渲染,各位手里都是有货的,页面渲染这些我也就不细谈了。
具体效果可以点这里:今日外网热搜榜
暂时想记录的就这些,有兴趣的欢迎在下边留言交流,有错误欢迎指正。
热门文章
- 微信小程序“拍照识图”上线(63,758)
- YouTube评论翻译插件《油管评论翻译机》上线了(60,288)
- 基金助手--chrome浏览器插件(45,193)
- 拍照识别彩票结果在线工具(31,943)
- vue+tabs动态组件方案漫谈(26,476)
- 《油管评论翻译机》使用说明书(25,337)
- 网页打印插件Print.js(23,978)
- 自用YouTube抓取评论+翻译工具(23,380)
- YouTube评论导出免费在线工具(18,054)
- px转rem/vw方法小结(17,565)