【问题标题】:Difficulty grabbing links inside HTML with scrapy使用 scrapy 难以在 HTML 中抓取链接
【发布时间】:2015-08-20 15:10:25
【问题描述】:

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

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 中的所有属性。这不是我需要的。我只想要链接,我需要将它们传递给一个项目。

这让我完全被难住了。所有的帮助都会得到近乎无限的感谢。

【问题讨论】:

  • 这里没有javascript..我看到的只是html和python。
  • 不要发布重复的问题,这些问题只是对原始问题的小更新。重复的问题会在多个帖子中分散有关某个主题的答案和信息,使其他人更难找到答案,并浪费人们时间重新提供您已经提供的答案。

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


【解决方案1】:

同样,我可以告诉你同样的 I have told you 你之前的问题:

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

当您使用 Scrapy 加载网站时,JavaScript 不会被执行并保持原样——您不会得到任何结果,也不会在前面提到的 divs 中获得 a 标签。

<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 发送或加载它,然后您可以对其进行解析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多