【问题标题】:Scrapy - Scraping hidden elementsScrapy - 抓取隐藏元素
【发布时间】:2019-06-18 17:25:28
【问题描述】:

我想我想问是否有可能绕过 sql:hide (https://docs.microsoft.com/en-us/sql/relational-databases/sqlxml-annotated-xsd-schemas-using/hiding-elements-and-attributes-by-using-sql-hide?view=sql-server-2017),但我在下面描述了我的实际问题,以防我弄错了:

我正在尝试从具有类似于以下 DOM 的网站中抓取“foo”网址:

<html>
    <body>
        <tbody>
            <tr>
                <a href="foo1">...</a>
                <a href="foo2">...</a>
            </tr>
        </tbody>
        <table>
            <tbody>
                <tr>
                    <a href="bar1">...</a>
                </tr>
                <tr>
                    <a href="bar2">...</a>
                </tr>
            </tbody>
        </table>
    </body>
</html>

每当我尝试print(response.css('a')) 或等效的print(response.xpath('//a')) 时,我都可以看到“foo”网址,但看不到“bar”网址。此外,使用 XPath 我可以访问表格,但 print(response.xpath('//table//*'))print(response.xpath('//table//a')) 都输出 []

有没有可能 table 的元素已经被 Scrapy 隐藏了?如何解决这个问题?

提前致谢。这主要是出于兴趣,因为网址无论如何都有可预测的模式。

【问题讨论】:

  • 您能否提供指向使用此功能的文件的链接? Scrapy 不关心 DOM,它关心底层的 XML/HTML 数据。重要的是,这些链接在该数据中的位置(如果它们在该数据中)。
  • 我试图抓取的页面在 HTTP 身份验证之后,所以我不认为我可以在这里分享它们。检查元素工具不能向我显示实际的 HTML 数据吗?有没有更好的方法来查看 HTML 数据?
  • 您能否检查身份验证后获得的 HTML,并尝试根据您获得的嵌入问题的 HTML 文件提供一个简短的 HTML 文件,该文件可用于重现问题?

标签: xpath scrapy css-selectors


【解决方案1】:

我知道这只是一个疯狂的猜测,但你可以试试

//a[starts-with(@href,'foo')]/text()

这应该为您提供所有 a 标记的文本值,这些标记具有 href 属性,其值以字符串 'foo' 开头。


但结果 XML/HTML 的某些部分可能会在稍后由 JavaScript 加载,这可以解释您在定位某些元素时遇到的困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2021-12-17
    • 2013-08-10
    相关资源
    最近更新 更多