从站点上的表单中刮取动态数据

时间:2018-05-14 12:18:08

标签: python selenium web-scraping beautifulsoup

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

我试图通过使用selenium进行抓取来提取整个完整列表。

最初在inspect元素部分,我有:

html code

当我们在表单中写下一些关键字时,这就会发生变化:

more html code

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'']

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

1 个答案:

答案 0 :(得分:1)

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()]")))]