需求
获取美国各州疫情数据美国疫情(每小时更新) 各州新增新冠确诊案例、疫苗接种率、实时新闻、疫情地图 - 咕噜美国通 (Guruin.com)
本来用的数据来源不是这个网站,但原先的数据源不让跨域爬虫,http和request都没法获取HTML源码,只好换了一个数据源
request获取目标网页源代码
1 2 3 4 5 6 7 8 9 10 11 12 13
| var request = require('request'); request({ url: 'https://www.guruin.com/guides/covid19', method: 'GET', headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36', } }, function (error, response, body) { if (!error && response.statusCode == 200) { } });
|
转换为cheerio对象,利用jquery选择器规则选取需要的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| var cheerio = require('cheerio'); var $ = cheerio.load(body);
[jQuery 选择器 菜鸟教程 (runoob.com)](https:
$('选择器')即为筛选的元素,要获取其文本,用.text()方法
如$('[data-total-positive]').text(),得到具有 data-total-positive 属性的元素的文本
要遍历所有符合的元素进行单独操作,使用 $('选择器').each(function(i,elem){$(this).text()...})
var positive = [] $('[data-total-positive]').each(function (i, elem) { positive[i] = $(this).text(); });
|
针对需求分析,可以选择用以下三个属性来筛选,分别对应确诊、死亡和接种率,然后分别遍历放到三个数组中
……写到这刚发现忘记爬取州名了,问题不大。
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| var request = require('request');
var cheerio = require('cheerio');
export { getData } function getData() { request({ url: 'https://www.guruin.com/guides/covid19', method: 'GET', headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36', } }, function (error, response, body) { if (!error && response.statusCode == 200) { var $ = cheerio.load(body); var positive = [] var death = [] var detection_rate = [] $('[data-total-positive]').each(function (i, elem) { positive[i] = $(this).text(); }); $('[data-total-death]').each(function (i, elem) { death[i] = $(this).text(); }); $('[data-detection-rate]').each(function (i, elem) { detection_rate[i] = $(this).text(); }); console.log(positive); console.log(death); console.log(detection_rate); } }); }
|