Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 有没有一种方法可以创建一个循环逻辑,可以为每个下拉列表选择不同的选项,然后为下一个选项再次重复?_R_Python 3.x_Algorithm_Selenium_Web Scraping - Fatal编程技术网

R 有没有一种方法可以创建一个循环逻辑,可以为每个下拉列表选择不同的选项,然后为下一个选项再次重复?

R 有没有一种方法可以创建一个循环逻辑,可以为每个下拉列表选择不同的选项,然后为下一个选项再次重复?,r,python-3.x,algorithm,selenium,web-scraping,R,Python 3.x,Algorithm,Selenium,Web Scraping,有人知道如何在Python或R中使用Selenium在动态网页上自动执行web抓取吗 情况: 此页面有几个下拉类别列表,每个类别列表都有几个选项,例如Brand是下拉类别列表的一个,它有很多选项可供选择,例如ALFA ROMEO、AUDI等。其他类别列表也是如此。此外,要为下一个类别列表选择选项,必须首先选择上一个类别或第一个类别的选项。选择所有类别列表的选项后,下一阶段是单击获取估价按钮。它将输出给定表上的信息。 目标: 目标是从表中获取所有类别和所有选项的所有信息,并以.csv格式存储。

有人知道如何在Python或R中使用Selenium在动态网页上自动执行web抓取吗

情况: 此页面有几个下拉类别列表,每个类别列表都有几个选项,例如Brand是下拉类别列表的一个,它有很多选项可供选择,例如ALFA ROMEO、AUDI等。其他类别列表也是如此。此外,要为下一个类别列表选择选项,必须首先选择上一个类别或第一个类别的选项。选择所有类别列表的选项后,下一阶段是单击获取估价按钮。它将输出给定表上的信息。

目标: 目标是从表中获取所有类别和所有选项的所有信息,并以.csv格式存储。 屏幕截图1类别中的选项列表: 屏幕截图2输出:

问题: 我尝试创建一个逻辑,它可以单击每个类别,一次选择一个选项,然后继续选择下一个类别的选项。在流程结束时,它将单击提交按钮以获取估价信息。但是,如果提供了输入,我的脚本只能单击一个选项。然后,如果我想为所有类别选择下一个选项,我必须反复使用相同的脚本,为索引编号输入不同的内容。这是按id引用的元素。这将是一项繁琐的非自动作业,如果有新更新的列表,这也可能是一个问题。 要复制的代码示例:

输出: 请参阅屏幕截图2
你们能建议如何创建一个脚本,可以循环并为每个下拉列表选择不同的选项,然后为下一个选项重复它吗?

对于每个选择元素,使函数逐个选择选项,然后在下一个选择元素上递归调用它自己

执行此操作时,可以将当前选定的项保存在数组中,当到达最后一个选定项时,可以随意使用它们。这是你修改过的代码,适用于你发布的URL

driver.geturl elem_cat=‘品牌’、‘系列’、‘年份’、‘cc’、‘变速箱’、‘变型’ def多定义驱动程序,元素索引,已选择: select=Selectdriver。通过[elem\U索引] options=select.options 选择每个选项 对于范围1中的i,选项: select.select_by_indexi 时间是0.3 如果元素指数=5: 我们在最后选择的项目 driver.find_element_by_idloan-calculate.click 选定=选定+[选项[i]。文本] 点击按钮。所选选项位于所选阵列中。 对这些信息做任何你需要做的事情 时间。睡眠0.1 打印选择 elif选项[i]。文本!=:跳过占位符 下一个select的递归调用。您可以更改[options[i].text] 获取有关此选项的任何信息 多定义驱动程序,元素索引+1,选定+[选项[i]。文本] 多定义驱动程序,0,[] 此代码的输出:

['ALFA ROMEO', '145', '2001', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '2000', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1999', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1998', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1997', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1996', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1995', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1995', '1598', '5 SP MANUAL']
['ALFA ROMEO', '146', '2002', '1598', '5 SP MANUAL']
...

您可以使用rvest包html_节点执行此操作。。。作用下拉列表中的每个项都有一个html id属性,该属性指向与该下拉列表项关联的数据。我会使用html_节点。。。函数生成ID列表,然后使用这些ID获取其余数据。看起来你很接近了。这就是我要找的逻辑。它工作得很好。非常感谢你,我的朋友。顺便问一下,多定义驱动程序,0,[]是什么意思?代码的最后一行。multi_define的第二个参数是我们当前所在的select的索引。最初我们从0开始。该函数在select 0中选择一个选项,并使用索引1调用自身。然后它将在select 1中循环选项,参见elif块中的elem_索引+1。最后一个参数是当前选定选项的数组。最初,我们没有选择任何内容。因此,多定义驱动程序,0,[]。在每次选择时,函数在调用自身时将当前选项追加到数组:selected+[options[i].text]。我也添加了一行来附加最后一个选项,看起来我忘记了。@Amz多个脚本并行运行听起来不错。也许你应该找到一种方法,而不是增加n2,直到除法是一个整数。因为如果你这样做,当n1是一个素数时,你需要有n2=n1脚本。在如何识别哪些脚本从哪个选项开始时会有一个问题-对。也许您的脚本需要作为参数,从哪个索引开始,在哪个索引停止。
['ALFA ROMEO', '145', '2001', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '2000', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1999', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1998', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1997', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1996', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1995', '1598', '5 SP MANUAL']
['ALFA ROMEO', '145', '1995', '1598', '5 SP MANUAL']
['ALFA ROMEO', '146', '2002', '1598', '5 SP MANUAL']
...