我正在尝试编写Python脚本,以便从屏幕右上角列出的Google产品中获取一些信息。 (通常有价格和卖家的6张图片)
我正在使用Python,PhantomJS和Selenium
谷歌搜索"红鞋"我希望我的脚本能够返回价格。我陷入了试图找到包含产品的元素的步骤。我的xpath错过了什么吗?
def getTopSongs(object):
print "Working YETI"
browser = webdriver.PhantomJS('c:/projects/phantomjs/phantomjs.exe')
browser.get('http://google.com/search?q=red+shoe')
time.sleep(5)
title = browser.find_element_by_xpath('//div[contains@class, "pla-unit")]/text()[contains(., "red")]/following::b').text
来自Google的网页I元素下的几个嵌套
<div id="rhs">
...
<div class="_Pwb">
<div class="_Ohb">
<div style="width:109px" class="pla-unit">
<div class="_PD">
<div class="pla-unit-img-container">
<div class="_Z5">
<div class="_vT"><a href="http://www.somewebsite.com">
<span class="rhsl4">Nina 'Forbes' Peep Toe Pump <b>Red</b> R...</span>
<span class="rhsg3 rhsl5">Nina 'Forbes' Peep Toe Pum...</span>
<span class="rhsg4">Nina 'Forbes' Peep Toe Pu...</span></a>
</div>
<div class="_QD"><b>$78.95</b></div>
<div class="_mC">
<span class="rhsl4 a">Nordstrom</span>
<span class="rhsg3 rhsl5 a">Nordstrom</span>
<span class="rhsg4 a">Nordstrom</span>
</div>
</div>
*更新: 我添加了更多HTML。在这个例子中,我希望得到($ 78.95)和(Norstrom)
的文本*更新 澄清一下,
<div id="rhs">
是一个独特的元素
然而,有多个(6)元素:
<div style="width:109px" class="pla-unit">
每个类别下的元素具有相同的名称,并遵循相同的结构和子结构 即,有6个
<div class="_PD">
<div class="pla-unit-img-container">
<div class="_Z5">
<div class="_vD">
<div class="_QD">
<div class="_mC">
等等。
主要目标是获取所有元素,但出于调试的目的,我正在寻求帮助以获得第一个元素。
在Firefox上使用XPathChecker的价格单位的xpath是: ID(&#39; rhs_block&#39;)/ X:DIV [1] / X:DIV / X:DIV / X:DIV / X:DIV [1] / X:DIV [1] / X:DIV [2 ] / X:DIV [2] / X:乙
答案 0 :(得分:0)
你可以使用ancestor :: to up up then then-sibling ::来获取跟随它的同一级别的元素。
我没有试过这个,但试一试:
title = browser.find_element_by_xpath('//div[contains@class, "pla-unit")]/text()[contains(., "red")]/ancestor::div/following-sibling::div[1]').text
然后转到你的div class ='mC'你只需要改变:
following-sibling::div[1]
到
following-sibling::div[2]
并从中获取文本。