【问题标题】:Python - javascript web scraping with selenium does not work properlyPython - 使用 selenium 的 javascript web 抓取无法正常工作
【发布时间】:2015-06-18 13:28:10
【问题描述】:

我正在尝试从一个航班搜索网页中抓取一些数据。它可能是用 Javascript 生成的。我尝试了很多方法,但没有任何效果,所以我决定尝试 selenium

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('https://www.pelikan.sk/sk/flights/list?dfc=CVIE%20BUD%20BTS&dtc=CMAD&rfc=CMAD&rtc=CVIE%20BUD%20BTS&dd=2015-07-09&rd=2015-07-14&px=1000&ns=0&prc=&rng=1&rbd=0&ct=0')
print driver.page_source

虽然它返回最终的 javascript 生成的 html 代码,但是在浏览器中打开此页面时,我找不到该页面上的字符串。

问题可能出在哪里?我应该怎么做才能获得这些航班?

编辑:我忘了提到该页面正在不断加载新航班。因此,当您在浏览器中打开它时,它会显示一些航班,但仍会加载其他航班。

【问题讨论】:

    标签: javascript python selenium selenium-webdriver web-scraping


    【解决方案1】:

    页面具有相当的动态性,您需要wait for the page to load。选择表明页面和搜索结果已加载的内容。例如,等到加载图像(带有鹈鹕)变为invisible

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    
    driver = webdriver.Firefox()
    driver.get("https://www.pelikan.sk/sk/flights/list?dfc=CVIE%20BUD%20BTS&dtc=CMAD&rfc=CMAD&rtc=CVIE%20BUD%20BTS&dd=2015-07-09&rd=2015-07-14&px=1000&ns=0&prc=&rng=1&rbd=0&ct=0")
    
    wait = WebDriverWait(driver, 60)
    wait.until(EC.invisibility_of_element_located((By.XPATH, '//img[contains(@src, "loading")]')))
    wait.until(EC.invisibility_of_element_located((By.XPATH, u'//div[. = "Poprosíme o trpezlivosť, hľadáme pre Vás ešte viac letov"]/preceding-sibling::img')))
    
    print(driver.page_source)
    

    在这里,我们正在等待两只鹈鹕飞走消失:一只较大的鹈鹕和一只较小的鹈鹕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2020-03-18
      • 1970-01-01
      • 2021-06-22
      • 2017-06-22
      • 1970-01-01
      • 2020-11-04
      相关资源
      最近更新 更多