如何使用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); } }) }); 

希望能帮助到你。