Selenium 解析 - 如何按一个类查找元素并返回另一个类
Posted
技术标签:
【中文标题】Selenium 解析 - 如何按一个类查找元素并返回另一个类【英文标题】:Selenium parsing - how to find elements by one class and return other class 【发布时间】:2018-09-03 20:59:49 【问题描述】:全部,
我正在尝试使用 Selenium 抓取动态零售网页。我正在尝试获取具有特定类名“产品名称”的所有项目的列表。该网站的 html 如下所示:
从随附的示例中,我想要的是产品名称/标题:“COACH X KEITH HARING CHARLIE CARRYALL IN SIGNATURE PATCHWORK”。我希望页面上的每个产品都有这个。为此,我可以搜索“标题”字段,或带有meta
标签的行中的“内容”字段。话虽这么说,我是 Selenium 的新手,不知道如何解决这个问题。我只知道 find_elements_by... 命令,但我认为它只会返回我指定/搜索的字段。我的代码应该从这个网页返回所有产品名称,所以我需要一些方法来指定如何识别标题/产品名称的位置,然后是一种提取这些字段的方法。
使用 BeautifulSoup 我可以按一个类名搜索并检索其他指定类的值,但我不知道如何以这种方式使用 Selenium。我想我需要使用 Selenium 而不是 BeautifulSoup,因为该网站是动态的。 Selenium 中是否内置了一些功能,例如 BeautifulSoup 中的 .findAll() 命令,可用于从使用另一个指定字段名称的行中检索一个字段名称?
提前致谢!
【问题讨论】:
您能分享您目前的代码以及您尝试解析的网址吗? 这是我所拥有的:namesElements = browser.find_elements_by_xpath("//div[@class='product-name']")
关于@Tarun Lalwani 的建议,我不知道使用“/”有此功能。当我第一次读到这个功能时,它对我来说意义不大。然而,现在看到这个例子,确实如此。对于将来研究此问题的任何人,此页面列出了许多使用 xpath 的不同方法:msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx。
请阅读为什么是screenshot of HTML or code or error is a bad idea。考虑使用基于格式化文本的相关 HTML、代码试验和错误堆栈跟踪来更新问题。
请不要在 cmets 中发布您的问题的更新。它使下一个读者更难找到。而是编辑您的问题并在那里添加详细信息。然后,您可以添加评论,说明您已使用 XXX 信息等更新问题。
【参考方案1】:
您可以使用一个漂亮、紧凑的 CSS 选择器来实现这一点。它们比 XPath 更快,而且我发现它们更容易阅读。
products = driver.find_elements_by_css_selector("meta[itemprop='name']")
for product in products:
print(product.get_attribute("content"))
我们基本上是在寻找这个META
标签
<meta itemprop="name" content="COACH X KEITH HARING ACADEMY BACKPACK">
使用itemprop
属性,然后拉取content
属性。
【讨论】:
【参考方案2】:这是非常简单和基本的 xpath
elems = driver.find_elements_by_xpath("//div[@class='product-name']/meta[@itemprop='name']")
for elem in elems:
print(elem.get_attribute("content"))
【讨论】:
META
标签上没有title
属性...而且我认为.get()
无论如何都不会获得该属性。
其实应该是内容。错别字以上是关于Selenium 解析 - 如何按一个类查找元素并返回另一个类的主要内容,如果未能解决你的问题,请参考以下文章
按文本查找元素并获取xpath - selenium webdriver junit