我在这里问了一个类似的问题,
但到目前为止它只能让我。
我需要获取链接,并且我了解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"><</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&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&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中的所有属性。这不是我需要的。我只想要链接,我需要将它们传递给一个项目。
这让我完全难过。所有帮助都将得到无限的谢意。
答案 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
发送或加载它,然后您可以解析它。