【发布时间】:2016-08-26 22:52:33
【问题描述】:
我正在尝试从网页中抓取一些文本。在我的网页上显示了一个单词列表。当我单击“+ 更多”时,其中一些是可见的,而另一些则是可见的。单击后,单词列表始终相同(相同顺序相同的单词)。然而,其中一些是粗体的,一些是被删除的。所以基本上数据库的每个项目都有一些特征。我想做什么:对于每个项目,告诉我哪些功能可用,哪些不可用。我的问题是克服“+ More”按钮。
我的脚本仅适用于那些显示的单词,而不适用于那些被“+ More”隐藏的单词。我要做的是收集节点“del”下的所有单词。我最初认为通过 lxml,网页会在 chrome 检查元素中出现时被加载,我相应地编写了我的代码:
from lxml import html
tree = html.fromstring(br.open(current_url).get_data())
mydata={}
if len(tree.xpath('//del[text()='some text']')) > 0:
mydata['some text'] = 'text is deleted from the web page!'
else:
mydata['some text'] = 'text is not deleted'
每次我运行这段代码时,我可以收集的实际上是网页上显示的数据的一部分,而不是点击“+更多”后会显示的完整单词列表。
我曾尝试过 selenium,但据我了解,它不是用于解析,而是用于与网页交互。但是,如果我运行这个:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.mywebpage.co.uk')
a = driver.find_element_by_xpath('//del[text()="some text"]')
我要么得到元素,要么得到一个错误。我想得到一个空列表,所以我可以这样做:
mydata = {}
if len(driver.find_element_by_xpath('//del[text()="some text"]')) > 0:
mydata['some text'] = 'text is deleted from the web page!'
else:
mydata['some text'] = 'text is not deleted'
或找到另一种方法来获取脚本捕获的这些“隐藏”元素。
我的问题是有人遇到过这种问题吗?他们是怎么解决的?
【问题讨论】:
标签: python-2.7 selenium web-scraping lxml