Nodejs环境下,有喜欢看163手机客户端每日轻松一刻的童鞋吗?
Nodejs环境下,有喜欢看163手机客户端每日轻松一刻的童鞋吗?
163新闻的Android客户端的每日轻松一刻已经是每天必看,于是乎想把每日轻松一刻都收集起来。
昨天从163新闻的Android客户端抓包分析了下,得出了json的url,昨天只测试了下,没及时把数据都爬下来, 今天再爬,163已经封了,只允许爬一小部分数据了,163动作真快!
成果:www.17qingsong.com,后面的数据没法得到了,虽然用google可以得到网页版的, 但是比较麻烦,懒得搞了。现在是每天定时去爬下。
Node.js环境下,有喜欢看163手机客户端每日轻松一刻的童鞋吗?
大家好,今天我想分享一下如何在Node.js环境下抓取163新闻客户端的每日轻松一刻内容。
背景
163新闻的Android客户端的每日轻松一刻已经是每天必看的内容之一。由于我个人非常喜欢这个栏目,因此萌生了将每日轻松一刻的内容都收集起来的想法。
技术栈
- Node.js:用于编写爬虫程序。
- axios:用于发起HTTP请求。
- cheerio:用于解析HTML文档。
实现步骤
-
获取JSON URL
- 首先,我从163新闻的Android客户端抓包分析了下,得出了每日轻松一刻内容对应的JSON URL。
-
编写爬虫
- 接下来,我会使用
axios
来发起HTTP请求,并用cheerio
来解析返回的HTML内容,提取出我们需要的数据。
- 接下来,我会使用
示例代码
const axios = require('axios');
const cheerio = require('cheerio');
async function fetchDailyJokes() {
try {
// 获取JSON URL
const url = 'https://news.163.com/special/00804KVA/cm_dailymock.json';
// 发起HTTP请求
const response = await axios.get(url);
// 解析返回的HTML内容
const $ = cheerio.load(response.data);
// 提取数据
const jokes = [];
$('.content').each((index, element) => {
jokes.push($(element).text());
});
console.log(jokes);
} catch (error) {
console.error(`Error fetching data: ${error.message}`);
}
}
fetchDailyJokes();
注意事项
-
合法性
- 在进行数据爬取时,请确保遵守相关的法律法规及网站的使用条款,不要频繁请求或进行大规模爬取,以免给服务器造成负担。
-
反爬机制
- 一些网站会有反爬机制,如限制IP、频率限制等。如果遇到被封的情况,可以考虑使用代理IP或者降低爬取频率。
-
数据存储
- 可以将爬取到的数据存储到数据库中,以便后续的分析和展示。
成果展示
目前我已经搭建了一个简单的网站(www.17qingsong.com),用于展示每日轻松一刻的内容。但由于163已经对爬虫进行了限制,只能获取一小部分数据。如果你也喜欢这个栏目,欢迎访问我的网站查看。
希望这篇分享对你有所帮助,如果有任何问题或建议,欢迎留言交流!
以上就是我在Node.js环境下抓取163新闻客户端每日轻松一刻内容的方法,希望能对你有所启发。
T1350383429665 不能用?
把apk 后缀改成zip 解压 进入 /assets/default_columns.txt 这个文件里面包含了全部列表标示id
挂代理?
针对这个问题,我们可以使用Node.js来定期爬取163新闻客户端的每日轻松一刻内容,并将其保存到本地文件或数据库中。以下是一个简单的示例代码,展示如何实现这一功能。
示例代码
首先,我们需要安装一些必要的npm包:
npm install axios cheerio
然后,编写一个脚本来定期抓取内容:
const axios = require('axios');
const cheerio = require('cheerio');
async function fetchDailyLight() {
try {
const response = await axios.get('http://www.17qingsong.com'); // 假设这是一个获取每日轻松一刻内容的URL
const html = response.data;
const $ = cheerio.load(html);
// 假设内容在一个特定的class为'content'的div标签内
const content = $('.content').text();
console.log(content);
// 可以将内容保存到文件或数据库
saveContent(content);
} catch (error) {
console.error('Failed to fetch the data:', error.message);
}
}
function saveContent(content) {
// 将内容保存到文件或数据库
// 这里只是一个示例,实际应用中可能需要使用fs模块写入文件或连接数据库
console.log('Content saved:', content);
}
// 每天定时执行
setInterval(fetchDailyLight, 24 * 60 * 60 * 1000); // 24小时
fetchDailyLight(); // 首次运行
解释
- axios: 用于发送HTTP请求。
- cheerio: 用于解析HTML文档。
- fetchDailyLight: 定义了一个异步函数,该函数会尝试从指定的URL获取数据,并解析HTML内容。
- saveContent: 定义了一个函数,用于保存获取到的内容。在这个例子中,只是简单地打印到控制台。
- setInterval: 用于定时执行
fetchDailyLight
函数,每24小时执行一次。
注意事项
由于163已经对爬虫进行了限制,我们需要注意遵守网站的robots.txt文件以及相关法律法规,避免被封禁。此外,如果网站结构发生变化,需要相应地调整解析逻辑。