【问题标题】:Parse string to get href given attribute value解析字符串以获取给定属性值的href
【发布时间】:2017-02-19 17:08:41
【问题描述】:

我有一个包含以下内容的字符串:

var string = 
'<div class="product-info-inner-content clearfix ">\
    <a href="http://www.adidas.co.uk/ace-17_-purecontrol-firm-ground-boots/BB4314.html"\
      class="link-BB4314 product-link clearfix "\
      data-context="name:ACE 17+ Purecontrol Firm Ground Boots"\
      data-track="BB4314"\
      data-productname="ACE 17+ Purecontrol Firm Ground Boots"  tabindex="-1">\
        <span class="title">ACE 17+ Purecontrol Firm Ground Boots</span>\
        <span class="subtitle">Men Football</span>\
    </a>\
</div>';

我正在尝试执行以下 Python 代码的 JavaScript 等效项,其中使用漂亮的汤来获取给定产品代码(即在本例中为 BB4314)的 div 类元素的 URL。

 is_listing = len(soup.findAll(name="div", attrs={"class": "product-tile"})) > 1
        if is_listing:
        # stuck from this part
        attrs = {"class": re.compile(r".*\bproduct-link\b.*"), "data-track": code} 
        url = soup.find(name="a", attrs=attrs)
        url = url["href"]

我该怎么做?

【问题讨论】:

    标签: javascript python beautifulsoup


    【解决方案1】:

    只使用 DOM

    var string = '<div class="product-info-inner-content clearfix "><a href="http://www.adidas.co.uk/ace-17_-purecontrol-firm-ground-boots/BB4314.html" class="link-BB4314 product-link clearfix " data-context="name:ACE 17+ Purecontrol Firm Ground Boots" data-track="BB4314" data-productname="ACE 17+ Purecontrol Firm Ground Boots"  tabindex="-1"><span class="title">ACE 17+ Purecontrol Firm Ground Boots</span> <span class="subtitle">Men Football</span></a></div>',
      div = document.createElement("div");
    div.innerHTML = string;
    var href = div.querySelector("a.product-link").href,
      parts = href.split("/"),
      code = parts.pop().split(".")[0];
    console.log(code)
    
    console.log(div.querySelector("a.product-link").getAttribute("data-track"))

    【讨论】:

    • 谢谢。如果字符串如下所示,这是否有效:pastebin.com/ttpn6wth(即解析整个网页)。
    • 是的,但您也可以获取并解析元标记:&lt;meta property="og:url" content="http://www.adidas.co.uk/search?q=BB4314" /&gt;
    • 谢谢,但是元标记将我带到列表页面,而实际上,我想要产品页面。
    • 查看更新,了解获取您给我的字符串中的代码的两种方法
    • 为什么不使用class选择器来获取&lt;a&gt;元素呢?例如,如果另一个&lt;a&gt; 元素位于[0],返回值为.getElementsByTagName("a")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多