Scrapy Selector CSS不返回子节点

时间:2017-09-21 19:49:00

标签: css web-scraping scrapy scrapy-splash

我正在使用Scrapy和Splash来抓取一个AJAX网页。

以下是HTML页面的简化版本:

<html>
    <head>
        <title>Title here</title>
    </head>
    <body>
        <select class="Gy(t)" data-reactid="5">
            <option selected="" value="1506038400" data-reactid="6">Item 0</option>
            <option value="200" data-reactid="7">Item 1</option>
            <option value="123" data-reactid="8">Item 2</option>
            <option value="800" data-reactid="9">Item 3</option>
            <option value="600" data-reactid="10">Item 4</option>
            <option value="240" data-reactid="11">Item 5</option>
            <option value="768" data-reactid="12">Item 6</option>
            <option value="132" data-reactid="13">Item 7</option>
            <option value="632" data-reactid="14">Item 8</option>
            <option value="418" data-reactid="15">Item 9</option>
            <option value="290" data-reactid="16">Item 10</option>
            <option value="748" data-reactid="17">Item 11, 2018</option>
            <option value="154" data-reactid="18">Item 12</option>
            <option value="579" data-reactid="19">Item 13</option>
        </select>
    </body>
</htnl>

单击/选择选项时,浏览器中会运行javascript,这会导致加载新页面。

我想模仿用户点击某个选项,以加载新页面。

所以这就是我想用Scrapy和Splah做的事情:

  1. 选择select HTML元素(及其option子节点)
  2. 仔细检查每个选项,然后点击&#39;它们。
  3. 这是我选择select元素的代码:

    我的代码

    >>> response.css('select.Gy\(t\)')
    [<Selector xpath="descendant-or-self::select[@class and contains(concat(' ', normalize-space(@class), ' '), ' Gy(t) ')]" data='<select class="Gy(t)" data-reactid="5">\n'>]
    >>> 
    

    可以看出,元素是空的,不包含子元素!

    我做错了什么?如何选择select元素及其子元素?

    一旦我选择了select元素,我想迭代它的所有子元素并单击它们。如何单击(选择)选项?

1 个答案:

答案 0 :(得分:1)

你有没有试过这个?

response.css('select option[data-reactid]')
response.css("select[class=Gy\(t\)] option[data-reactid]")

两者都应该有效。