gpt4 book ai didi

python-2.7 - 如何从网页中抓取隐藏文本?

转载 作者:行者123 更新时间:2023-12-02 03:16:08 25 4
gpt4 key购买 nike

我正在尝试从网页中抓取一些文本。在我的网页上显示了一个单词列表。当我点击“+更多”时,其中一些是可见的,另一些则变得可见。单击后,单词列表始终相同(相同顺序相同的单词)。但是,其中一些以粗体显示,一些已删除。所以基本上数据库的每个项目都有一些特征。我想做什么:对于每个项目,告诉我哪些功能可用,哪些不可用。我的问题是克服“+更多”按钮。

我的脚本仅适用于显示的那些词,而不适用于“+ More”隐藏的那些词。我想做的是收集节点“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):

driver.find_elements_by_xpath('//del[text()="some text"]')

关于python-2.7 - 如何从网页中抓取隐藏文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36977950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com