Python 2.7 如何从网页中删除隐藏文本?
我正试图从网页上抓取一些文字。在我的网页上有一个单词列表。当我点击“+更多”时,其中一些是可见的,另一些是可见的。单击后,单词列表始终相同(相同顺序相同单词)。但是,其中有些是粗体的,有些是删除的。所以基本上数据库的每一项都有一些特性。我想做的是:对于每个项目,告诉我哪些功能可用,哪些不可用。我的问题是克服“+更多”按钮Python 2.7 如何从网页中删除隐藏文本?,python-2.7,selenium,web-scraping,lxml,Python 2.7,Selenium,Web Scraping,Lxml,我正试图从网页上抓取一些文字。在我的网页上有一个单词列表。当我点击“+更多”时,其中一些是可见的,另一些是可见的。单击后,单词列表始终相同(相同顺序相同单词)。但是,其中有些是粗体的,有些是删除的。所以基本上数据库的每一项都有一些特性。我想做的是:对于每个项目,告诉我哪些功能可用,哪些不可用。我的问题是克服“+更多”按钮 我的脚本只适用于那些显示的单词,而不适用于那些被“+更多”隐藏的单词。我想做的是收集节点“del”下面的所有单词。我最初认为,通过lxml,网页会像chrome inspect
我的脚本只适用于那些显示的单词,而不适用于那些被“+更多”隐藏的单词。我想做的是收集节点“del”下面的所有单词。我最初认为,通过lxml,网页会像chrome inspect元素中显示的那样被加载,因此我编写了相应的代码:
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'
或者找到另一种方法来获取脚本捕获的这些“隐藏”元素
我的问题是有人有过这种问题吗?他们是如何分类的?如果我理解正确,您希望在列表中查找元素。但是,如果元素在页面上不可用,Selenium会抛出ElementNotFoundException,而不是返回列表 我的问题是你为什么想要一份清单?根据您的示例判断,您希望查看页面上是否存在元素。您可以通过使用try/except轻松实现这一点
from selenium.common.exceptions import TimeoutException
try:
driver.find_element_by_xpath('//del[text()="some text"]')
mydata['some text'] = 'text is deleted from the web page!'
except TimeOutException:
mydata['some text'] = 'text is not deleted'
现在如果你真的需要这个列表,你可以在页面上搜索多个元素。这将返回列表中与定位器匹配的所有元素。
要执行此操作,请更换:
driver.find_element_by_xpath('//del[text()="some text"]')
使用(元素s):
嗨,雷姆科。谢谢你的回答。是的,在我的网页上有一个单词列表。当我点击“+更多”时,其中一些是可见的,另一些是可见的。单击后,单词列表始终相同(相同顺序相同单词)。但是,其中有些是粗体的,有些是删除的。所以基本上数据库的每一项都有一些特性。我想做的是:对于每个项目,告诉我哪些功能可用,哪些不可用。我的问题是克服“+More”按钮。我的脚本只适用于显示的单词,而不适用于“+More”隐藏的单词。我会试试你的代码,让你知道。我对selenium的担心是它看起来很慢……它只是打开了网页,没有在我的字典中保存任何数据;(你有没有可能给我看一下这个列表的HTML,或者创建一个类似的例子?@user0978189这是一个很烦人的页面。无论如何,我假设你想刮一下这些便利设施。你将无法读取所有隐藏的设施,因为它们还不在DOM中。这意味着你必须先获取“更多”按钮的名称,然后单击此按钮。之后可以查找隐藏的所有元素。
driver.find_elements_by_xpath('//del[text()="some text"]')