在执行JavaScripts之后用python加载web页面

2024-06-11 20:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我第一次尝试使用urllib2,但是由于定义是在JS执行之后出现的(这很有意义,duh),所以它不起作用。我也尝试过selenium,但据我所知,它必须打开一个导航窗口,对吗?我需要它像urllib2,隐形。在

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

有什么想法吗?在


Tags: 用户内容字典定义jsurllib2单词word
2条回答

您可以通过selenium使无头^{}浏览器自动化:

>>> 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.

我可能会像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的需求。在

运行上述代码将生成:

^{pr2}$

请注意,我没有检测到需要使用任何等待机制来检测页面内容是否已准备就绪。在调试器中查看页面a)我没有看到任何Ajax请求,b)查看JavaScript和页面本身,看起来所提供的是一个模糊的页面,JavaScript会同步地消除的影响。所以在driver.get返回时,内容应该已经准备好可以使用了。在

相关问题 更多 >