Scrapy Selector CSS 不返回子节点
Scrapy Selector CSS not returning child nodes
我正在使用 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>
A javascript is 运行 in the browser when an option is clicked/selected, and this cause a new page to be loaded.
我想模仿用户点击一个选项来加载新页面。
这就是我想用 Scrapy 和 Splah 做的事情:
- Select
select
HTML 元素(及其 option
子节点)
- 遍历每个选项并'click'它们。
这是我 selecting 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
元素及其子元素?
一旦我 select 编辑了 select
元素,我想遍历它的所有子元素并单击它们。如何单击 (select) 一个选项?
你试过吗?
response.css('select option[data-reactid]')
response.css("select[class=Gy\(t\)] option[data-reactid]")
两者都应该有效。
我正在使用 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>
A javascript is 运行 in the browser when an option is clicked/selected, and this cause a new page to be loaded.
我想模仿用户点击一个选项来加载新页面。
这就是我想用 Scrapy 和 Splah 做的事情:
- Select
select
HTML 元素(及其option
子节点) - 遍历每个选项并'click'它们。
这是我 selecting 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
元素及其子元素?
一旦我 select 编辑了 select
元素,我想遍历它的所有子元素并单击它们。如何单击 (select) 一个选项?
你试过吗?
response.css('select option[data-reactid]')
response.css("select[class=Gy\(t\)] option[data-reactid]")
两者都应该有效。