通过 xpath returns 空列表在 lxml 树中搜索元素

Search for element in lxml tree by xpath returns empty list

我试图通过 xpath 查找元素,然后打印那条信息,但不幸的是这段代码 returns 是一个空列表:

response = requests.get('https://justjoin.it/offers/ulam-labs-frontend-developer')
tree = html.fromstring(response.content)
result = tree.xpath('//div[contains(@class, "css-eytwkb") and text() = "EXP. lvl"]/preceding-sibling::div[1]')
print(result)

上面的 Xpath 在 selenium 和 firefox 检查器中工作得很好,所以我真的不知道这段代码有什么问题。这是 HTML:

<div class="css-1uvpahd">
   <div class="css-1e6hsr3">
      <svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
         <path d="M3.5 18.49l6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99z"></path>
      </svg>
   </div>
   <div class="css-1ji7bvd">senior</div>
   <div class="css-eytwkb">EXP. lvl</div>
</div>

我想在 css-1ji7bvd class 中提取 senior

这是因为页面内容是由JS动态渲染的。如果你关掉它,你将看不到太多。这就是你的 Xpath 不起作用的原因,因为源代码中没有这样的元素。

不过网站提供了一个API可以查询。以下是获取您要查找的字段的方法。

要获得 API 请求 URL 只需检查开发人员工具控制台中的 XHR 选项卡并尝试以下操作:

import requests
url = "https://justjoin.it/api/offers/ulam-labs-frontend-developer"
requests.get(url).json()['experience_level']

这输出 senior.