我有一个网站,我希望使用XPATH从中提取值。这些值是可更改的,但通常它们在相同的重复节点树中(有数百个相同结构的节点树具有此一个可更改的值)。这是其中一棵树的示例:
<div style="position: absolute; left: 0px; top: 178px; height: 89px; width: 100%;">
<a class="css-18rtd1e" href="/offers/appunite-backend-developer-elixir">
<div class="css-ysfq6d"></div>
<div class="css-1anw03b"><img src="https://bucket.justjoin.it/offers/company_logos/thumb/22f3ad736e1bc02190ff8beb9d4c55a4de297104.png?1572275788" alt="AppUnite" class="css-h8h6qh"></div>
<div class="css-rmb95w">
<div class="css-fxb39h">
<div class="css-18hez3m">
<div class="css-1x9zltl">Elixir Developer</div>
<div class="css-1suuexb"><span class="css-5fhp0m">Online<br>interview</span></div>
</div>
<div class="css-16tql6o">
<span class="css-112rr0w">7 000 - 11 000 PLN </span>
<div class="css-hw5uoy">New</div>
</div>
</div>
<div class="css-m6o8yl">
<div class="css-pdwro7">
<div class="css-ajz12e">
<svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z"></path>
</svg>
AppUnite
</div>
<div class="css-1ihx907">
<svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 2C8.13 2 5 5.13 5 9c0 4.17 4.42 9.92 6.24 12.11.4.48 1.13.48 1.53 0C14.58 18.92 19 13.17 19 9c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"></path>
</svg>
Poznań
</div>
<span class="css-5fhp0m">Online interview</span>
</div>
<div class="css-1ij7669">
<div class="tag css-1g8us6r">Phoenix</div>
<div class="tag css-1g8us6r">Elixir</div>
<div class="tag css-1g8us6r">Web Applications</div>
</div>
</div>
</div>
</a>
</div>
我想提取单词AppUnite
,这将是一个简单的任务,但要满足一个条件:我需要在包含"css-1x9zltl"
类文本的XPATH元素中使用(在这种情况下,将是单词Elixir Developer
)。换句话说,我想使用从AppUnite
类中提取的单词来访问"css-1x9zltl"
。所以开始很简单://div[contains(@class, "css-1x9zltl") and text()="Elixir Developer"]
但接下来呢?
答案 0 :(得分:1)
您想获得招聘公司的名称。
由于JJI网站上@class
属性的名称是固定的(css-1x9zltl
,css-ajz12e
),因此可以使用:
//div[contains(@class,"css-1x9zltl")][contains(.,"Elixir Developer")]/following::div[@class="css-ajz12e"][1]/text()
请注意,这将选择“ Elixir Developer”,“ Senior Elixir Developer”提供。为了更加严格,请删除第二个contains
:
//div[contains(@class,"css-1x9zltl")][.="Elixir Developer"]/following::div[@class="css-ajz12e"][1]/text()
答案 1 :(得分:0)
如果我对您的问题理解正确,那么以您问题中的示例为例,这样的xpath表达式可以解决问题:
//div[contains(@class, "css-1x9zltl")]["Elixir Developer"]/ancestor::div[@class="css-fxb39h"][1]/following-sibling::div [@class="css-m6o8yl"]//div[@class="css-ajz12e"]/text()
此表达式基本上定位满足您的类和文本条件的<div>
节点,然后上升到第一个祖先,该祖先是<div>
节点的同胞,目标文本被埋在其中,然后下降到<div>
子节点(该子节点的子节点)中,该子节点包含目标文本,最后选择该子节点的文本节点。