【问题标题】:Scraping two drop down menus with selenium -Python使用 selenium -Python 抓取两个下拉菜单
【发布时间】:2021-03-26 04:03:49
【问题描述】:

我正在尝试从某种嵌套下拉菜单中抓取所有数据(使用 Python 和 Selenium),但到目前为止,我只设法打印出第一个下拉菜单的值。

该网站是土耳其语,但基本上我的目标是打印所有城市的名称(第一个下拉列表)、这些城市内的城镇(第二个下拉列表),最后是结果表中的所有地址。出于某种原因,我可以对第一个下拉菜单进行操作,但第二个下拉菜单给了我一个空的结果。以下是我的参考代码:

url = ('https://camiler.diyanet.gov.tr/')
browser.get(url)
city=browser.find_elements_by_id("ctl00_ctl35_g_7c8222a9_e27f_4831_b393_65197bc417d3_drpIl")
town=browser.find_elements_by_id("ctl00_ctl35_g_7c8222a9_e27f_4831_b393_65197bc417d3_drpIlce")
# city.select_by_index(81)
for c in city :
    for t in town :
        print(c.text)
        print(t.text)

【问题讨论】:

    标签: python html selenium web-scraping beautifulsoup


    【解决方案1】:

    似乎第二个下拉列表从第一个条目中选择了一个条目之后被填充。

    您可以在以下第一个下拉列表的代码中看到此行为:

    <select name="ctl00$ctl35$g_7c8222a9_e27f_4831_b393_65197bc417d3$drpIl" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ctl35$g_7c8222a9_e27f_4831_b393_65197bc417d3$drpIl\',\'\')', 0)" id="ctl00_ctl35_g_7c8222a9_e27f_4831_b393_65197bc417d3_drpIl" class="form-control">
                        <option value="Seçiniz">Seçiniz</option>
                        ....
    

    因此,如果您想为此使用 selenium,我认为您需要模拟鼠标移动并单击不同的条目。

    有关鼠标操作的更多信息,您可以查看the doc

    【讨论】:

    • 我明白了,我以为我是用嵌套循环来做的。除了 Selenium,你还有什么推荐的吗?谢谢大家!
    • 在某些情况下,您可以通过执行请求并解析 json 或它返回的任何内容,以一种简单的方式反转前端使用的 API 以获取您的响应。但是,在您的特定情况下,似乎每次您从第一个保管箱中选择一个条目时,它都会对同一 URL 执行 POST 请求。您应该能够记录每个城市的特定请求并仅模拟此行为,而不是单击鼠标。在任何情况下,这值得吗?城镇关系通常不会经常变化,所以我想知道你是否可以保存一个 json 并在每次需要时加载它
    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多