首页 > 解决方案 > 从网站上的表单中抓取动态数据

问题描述

我正在尝试从网站上的表单中抓取动态选项列表。该网站的工作方式是,当您在查询框中输入一些数据时,它会将它们作为关键字并从其自己的数据库中搜索并相应地生成结果。

我正在尝试通过使用 selenium 抓取来提取整个完整列表。

最初在检查元素部分,我有:

html代码

这就是我们在表单中写一些关键字时发生的变化:

更多html代码

for i in range(1,100):
    try:
        depart.append(browser.find_elements_by_class_name("accessabilityBar textIndent")[i].text)   
    except Exception as e:
        break
print(depart)

所以,这是我得到的输出:[u'']

有人可以帮我解决这个问题吗?

标签: pythonseleniumweb-scrapingbeautifulsoup

解决方案


browser.find_elements_by_class_name("accessabilityBar textIndent")返回一个异常,因为不允许复合类名,但异常被except块捕获。

请尝试以下方法:

depart = [item.text for item in browser.find_elements_by_css_selector("span.accessabilityBar.textIndent")]

如果您需要等到生成文本,您可能需要使用

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(browser, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath('//iframe[@src="s.effectivemeasure.net/html/frame_2.3.7.html"]')))
depart = [item.text for item in WebDriverWait(browser, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//span[@class='accessabilityBar textIndent' and normalize-space()]")))]

推荐阅读