【问题标题】:Load web page in python AFTER JavaScripts executes在 JavaScript 执行后在 python 中加载网页
【发布时间】:2015-05-22 14:16:23
【问题描述】:

我想根据用户输入的内容来获取西班牙语单词的定义(如字典)。这个想法是:

>>> hola
'1. interj. U. como salutación familiar.'

我第一次尝试使用 urllib2,但由于定义是在 JS 执行之后出现的(有道理,duh)它不起作用。我也尝试过 selenium,但据我了解,它必须打开一个导航器窗口,对吧?我需要它像 urllib2,不可见。

如果你想尝试,我搜索定义的页面是http://lema.rae.es/drae/?val=word,其中 word 是用户输入的词。

有什么想法吗?

【问题讨论】:

    标签: python selenium web-scraping urllib2


    【解决方案1】:

    我可能会像alecxe suggested 那样做,但我会使用加载定义本身的 URL。比如搜索azul

    from selenium import webdriver
    
    driver = webdriver.PhantomJS()
    driver.get('http://lema.rae.es/drae/srv/search?val=azul')
    print driver.find_element_by_css_selector("body>div").text
    

    出现在问题中的 URL 会加载一个页面,然后该页面会在 iframe 元素中加载定义的 URL。使用我上面显示的 URL 直接加载定义可以节省一些工作和一些复杂性:整个定义包含在 body 的第一个 div 子项中。不幸的是,它并没有消除对 JavaScript 的需求。

    运行上面的代码会产生:

    azul.
    (Quizá alterac. del ár. hisp. lazawárd, este del ár. lāzaward, este del persa laǧvard o lažvard, y este del sánscr. rājāvarta, rizo del rey).
    1. adj. Del color del cielo sin nubes. Es el quinto color del espectro solar. U. t. c. s.
    2. m. El cielo, el espacio. U. m. en leng. poét.
    3. m. Méx. Miembro del cuerpo de Policía.
    ~ de cobalto.
    [... etc ...]
    

    请注意,我没有检测到需要使用任何等待机制来检测页面内容是否已准备就绪。在调试器中查看页面 a) 我没有看到任何 Ajax 请求 b) 查看 JavaScript 和页面本身,看起来所服务的是一个混淆页面,然后 JavaScript 会同步去混淆 。所以当driver.get 返回时,内容应该可以使用了。

    【讨论】:

      【解决方案2】:

      您可以通过selenium 自动化无头PhantomJS 浏览器:

      >>> from selenium import webdriver
      >>>
      >>> driver = webdriver.PhantomJS()
      >>> driver.get('http://lema.rae.es/drae/?val=word')
      >>>
      >>> description = driver.find_element_by_css_selector('div.field-content p.azul')
      >>> print description.text
      El Diccionario de la lengua española (DRAE) es la obra de referencia de la Academia. La última edición es la 23.ª, publicada en octubre de 2014. Mientras se trabaja en la edición digital, que estará disponible próximamente, esta versión electrónica permite acceder al contenido de la 22.ª edición y las enmiendas incorporadas hasta 2012.
      

      【讨论】:

      • 当我尝试执行 driver = webdriver.PhantomJS() 时出现错误:selenium.common.exceptions.WebDriverException: Message: Unable to start phantomjs with ghostdriver。屏幕截图:可通过屏幕获得
      • @franciscosollima 很好,请参阅 superuser.com/questions/674322/…stackoverflow.com/questions/16389938/…。首先将selenium升级到最新版本:pip install --upgrade selenium。另外,下载phantojs 可执行文件并通过driver = webdriver.PhantomJS('path_here') 启动它。希望对您有所帮助。
      • 好的,我得过几个小时试试,抱歉耽搁了。
      猜你喜欢
      • 1970-01-01
      • 2019-04-07
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 2012-02-18
      • 2012-03-17
      相关资源
      最近更新 更多