【问题标题】:Selecting multiple tags with the same className?选择具有相同类名的多个标签?
【发布时间】:2017-08-11 20:46:39
【问题描述】:

使用这种语法:

x('http://www.viadeo.com/fr/company/unicef', 
    '.page-content',
    [{
    img:'img@src',
    bio:'.pan-desc-description',

    org:'.pan-desc-footer-element @element-value',
    link: '.element-value a@href',
    **twitter:'.element-value a@href'** // I get the previous link not the twitter one 

}]).write('result.json')

网站中有多个具有该特定类名的项目,但它只返回第一个。有没有办法抓住所有这些,也许我可以用那个回报做一个 .limit ?如果它在文档中,我深表歉意,我已经通读了两次,似乎没有在任何地方明确说明。

【问题讨论】:

    标签: javascript node.js web-scraping web-crawler x-ray


    【解决方案1】:

    您可以利用 chrome 检查器工具来获得正确的选择器,

    这里,这段代码对我有用,

    var Xray = require('x-ray');
    var x = Xray();
    x('http://www.viadeo.com/fr/company/unicef', 
    '.page-content',
     [{
      img:'img@src',
      bio:'.pan-desc-description',
      org:'.pan-desc-footer-element @element-value',
      link: '.element-value a@href',
      twitter:'.mbs:nth-child(4) a@href' // or use div.element-value.gu.gu-last a@href
    }]).write('result.json')
    

    然后,我们得到了这个结果。

    [
      {
        "img": "http://static8.viadeo-static.com/fzv6VNzGukb7mt5oV0Nl-wQxCDI=/fit-in/200x200/filters:fill(white)/7766b960b98f4e85affdab7ffa9863c7/1434471183.jpeg",
        "bio": "Le Fonds des Nations unies pour l'enfance (abrégé en UNICEF ou Unicef pour United Nations International Children's Emergency Fund en anglais) est une agence de l'ONU consacrée à l'amélioration et à la promotion de la condition des enfants. Son nom était originellement United Nations International Children's Emergency Fund, dont elle a conservé l'acronyme. Elle a activement participé à la rédaction, la conception et la promotion de la convention relative aux droits de l'enfant (CIDE), adoptée suite au sommet de New York en 1989. Son revenu total en 2006 a été de 2 781 millions Dollar US.\r\n          L'UNICEF a reçu le prix Nobel de la paix en 1965.",
        "link": "http://www.unicef.org/",
        "twitter": "http://www.twitter.com/UNICEF "
      }
    ]
    

    以下是如何在 chrome 上获得合适的选择器:

    首先您右键单击并单击检查。

    然后单击复制选择器,然后使用它。

    当你复制选择器时,它会说,

    #pan-desc > div.pan-desc-grey > div > div:nth-child(4) > div.element-value.gu.gu-last > a
    

    你可以直接使用,也可以提炼。

    【讨论】:

    • 发自内心的感谢你,现在我更了解它的工作原理了!
    【解决方案2】:

    你只需要用括号把你想要“拆分”的东西包起来。

    这是对我有用的代码。

    var Xray = require('x-ray');
    var x = Xray();
    
    x('http://www.viadeo.com/fr/company/unicef',
        '.page-content',
        {
        img:'img@src',
        bio:'.pan-desc-description',
    
        org:'.pan-desc-footer-element @element-value',
        link: ['.element-value a@href'],
        //twitter:'.element-value a@href'
    
    })
    (function(err, title) {
      console.log(title)
    });
    

    我还删除了外部括号,因为页面内容永远不会有超过一个元素,所以你永远不会想要超过一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      相关资源
      最近更新 更多