如何使用cheerio从网页中的换行中删除内容
祝大家好日子。
我有2个问题在使用Cheerionetworking抓取。 我经历了可能有我的答案的问题,但找不到回答我的问题的问题,于是我决定提出一个问题。
背景资料:我只学习Javascript约2〜3个月,所以我可能会问一些很有趣的问题,请原谅。
目的:我正在寻找从以下网站刮来的数据 –
我期待得到
- 自行车商店的名字
- 自行车商店的地址
- 自行车店的电话
我已经设法刮掉我需要的数据,但是它们是在一个HTML组中(不知道这是如何调用它,这是我使用的代码。
var request = require('request'); var cheerio = require('cheerio'); var url = 'http://www.togoparts.com/bikeshops/list_shops.php?country=MY'; request(url, function(err, resp, body) { if (err) throw err; $ = cheerio.load(body, { normalizeWhitespace: false }); var doc = $("td[width='52%'].verdana1"); doc.each(function() { var link = $(this); console.log(link.html()); }); });
结果运行在一个循环中,我可以得到以下内容。 我无法发布图片 – 我已经将图片放在以下链接中 。
问题:如何分别获取数据?
我需要链接的标题,我试过`var link = $(this).attr('href');' 但不起作用。
换行后我还需要信息(bikeshop地址) – 我不知道如何去做。
问题2:我尝试了以下var doc = $("td[width='52%'] .verdana1");
– 注意.verdana1之前的空格 – 这只给我我想要的bikeshops的标题,这与var doc = $("td[width='52%'].verdana1");
如果我使用这个var doc = $("td[width='52%'] .verdana1");
– 我怎样才能得到自行车店地址的数据?
非常感谢你的阅读,在农历新年期间我一直在努力解决这个问题,这让我疯狂:我期待着向你们学习。
布赖恩
在链接的情况下,您可以先在您的文档中find它们,然后logging所有的href属性:
var doc = $("td[width='52%'].verdana1"); links = doc.find('a'); links.each(function (i,elem) { console.log(elem.attribs.href); })
这将logginghref atttribute的所有值。
当涉及到地址时,它更复杂,因为它们在DOM中没有语义区分,它们也是表格单元格的子元素,所以您需要嵌套循环,但是可以通过查找types为text的元素来访问它们。
doc.each(function (i,elem) { # elem here is table cell elem.children.forEach(function (child,i) { # now all children of table cell (ie links,spans,divs and just text) if (child.type == "text") { console.log(child.data); } }) });
希望能帮助到你。