难以在scrapy中抓取HTML内部的链接

时间:2015-08-20 15:10:26

标签: html xpath web-scraping scrapy scrapy-spider

我在这里问了一个类似的问题,

Trouble getting correct Xpath

但到目前为止它只能让我。

我需要获取链接,并且我了解Scrapy需要验证HTML。这是HTML

class="shopthepost-widget" data-widget-id="708473" data-widget-uid="1"><div id="stp-55d44feabd0eb" class="stp-outer stp-no-controls ">
    <a class="stp-control stp-left stp-hidden">&lt;</a>
    <div class="stp-inner">
        <div class="stp-slide" style="left: -0%">
                        <a href="http://rstyle.me/iA-n/zzhv34c_" target="_blank" rel="nofollow" class="stp-product " data-index="0">
                <span class="stp-help"></span>
                <img src="//images.rewardstyle.com/img?v=2.13&amp;p=n_24878713">
                            </a>
                        <a href="http://rstyle.me/iA-n/zzhvw4c_" target="_blank" rel="nofollow" class="stp-product " data-index="1">
                <span class="stp-help"></span>
                <img src="//images.rewardstyle.com/img?v=2.13&amp;p=n_24878708">
                            </a>

所以我试过

for widget in response.xpath("//div[@class='shopthepost-widget']"):
  print response.xpath('.//*[@class="shopthepost-widget"]//a/@href').extract()

这不会产生任何结果,但如果我用href替换text(),那么它会产生HTML中的所有属性。这不是我需要的。我只想要链接,我需要将它们传递给一个项目。

这让我完全难过。所有帮助都将得到无限的谢意。

1 个答案:

答案 0 :(得分:1)

同样,我可以告诉您前一个问题I have told you的相同内容:

在浏览器中加载网站时,JavaScript会在div @class='shopthepost-widget'之间执行。

当您使用Scrapy加载网站时,JavaScript不会被执行并且保持原样 - 并且您在前面提到的a s中没有得到任何结果和div标记

<div class="shopthepost-widget" data-widget-id="708473">
    <script type="text/javascript">!function(d,s,id){var e, p = /^http:/.test(d.location) ? 'http' : 'https';if(!d.getElementById(id)) {e = d.createElement(s);e.id = id;e.src = p + '://' + 'widgets.rewardstyle.com' + '/js/shopthepost.js';d.body.appendChild(e);}if(typeof window.__stp === 'object') if(d.readyState === 'complete') {window.__stp.init();}}(document, 'script', 'shopthepost-script');</script>
    <br>
    <div class="rs-adblock">
        <img onerror="this.parentNode.innerHTML='Disable your ad blocking software to view this content.'" src="//assets.rewardstyle.com/images/search/350.gif" style="height: 15px; width: 15px;"><noscript>JavaScript is currently disabled in this browser. Reactivate it to view this content.</noscript>
    </div>
</div>

很明显,你的XPath没有得到任何结果,因为没有你需要的结果。

但是,您可以使用Chrome作为示例,并查看加载网站时发送的XHR请求。它们似乎包含您正在寻找的结果。找到请求后,您可以模拟它,将其作为Request发送或加载它,然后您可以解析它。