【问题标题】:How to get following-sibling or child of HTML with xpath如何使用 xpath 获取 HTML 的后续兄弟或子级
【发布时间】:2021-05-20 10:18:28
【问题描述】:

我有一些要抓取的 HTML。尝试学习 Selenium。我需要的是Fashion、Long等词。 我试过了:

 style = driver.find_element_by_xpath("//strong[text()='Style:']/following::strong").text

 style = driver.find_element_by_xpath("//strong[text()='Style:']/following-sibling::strong").text

 style = driver.find_element_by_xpath("//strong[contains(.,'Style:')] /preceding-sibling::strong").text

以及介于两者之间的一切。

 <div class="xxkkk20">
 <strong>Style:</strong> Fashion <br>             
 <strong>Shirt Length:</strong> Long <br>
 <strong>Collar:</strong> Scoop Neck <br>
 <strong>Material:</strong> Polyester <br>  
 <strong>Pattern Type:</strong> Floral,Skulls <br>
 <strong>Embellishment:</strong> Lace <br>
 <strong>Thickness:</strong> Standard <br>
 <strong>Fabric Stretch:</strong> High Stretch <br>
 <strong>Seasons:</strong> Summer <br>
 <strong>Weight:</strong> 0.1700kg <br>
 <strong>Package Contents:</strong> 1 x Tank Top         
 </div>

【问题讨论】:

  • 我在板子的帮助下玩了一点,想出了这个:material = [material] print(material) 这是我得到的输出:['Style: Fashion\nShirt Length : 长\n领子:汤匙领\n材质:涤纶\n图案类型:花卉、骷髅头\n装饰:蕾丝\n厚度:标准\n面料弹力:高弹力\n季节:夏季\n重量:0.1700 公斤\n包装内容:1 x 背心' ]

标签: selenium xpath screen-scraping


【解决方案1】:

您可以将它们全部存储在下面给出的列表中,并在列表中迭代它们以获取所有 Web 元素,最后应用 text 方法提取文本。

all_elements = driver.find_elements(By.XPATH, "//div[@class='xxkkk20']/strong")
for ele in all_elements:
   print(ele.text)

更新 1:

keys = driver.find_elements(By.XPATH, "//strong")
for key in keys: 
  print(key.get_attribute('innerHTML'))

【讨论】:

  • 那只是打印了密钥。我需要每个键后面的东西。谢谢。
  • @tejas : 查看 Update1 部分​​
【解决方案2】:
pairs = driver.find_elements(By.XPATH,'//div[@class="xxkkk20"]').text.split("\n")
for pair in pairs:
    texts = pair.split()
    print(texts[1])

说明:
首先,您将获得父 div 元素内的所有文本。
然后根据那里的&lt;br&gt; 元素将其拆分为\n
现在您实际上应该有一对文本,例如Style: Fashion
而且由于您只想获得第二个值,因此您需要拆分每一对并获得第二个子字符串。
我建议在对字符串的第一个和第二个文本之间有一个空格。
如果那里没有空格,您仍然可以将其最终拆分为:,因此它看起来像这样:

pairs = driver.find_elements(By.XPATH,'//div[@class="xxkkk20"]')text.split("\n")
for pair in pairs:
    texts = pair.split(":")
    print(texts[1])

【讨论】:

  • 我无法得到 text.split("\n") 它给了我一个属性错误
  • pairspairs = driver.find_elements(By.XPATH,'//div[@class="xxkkk20"]').text 之后看到了什么?没有.split("\n")
  • 如果是null,也许你错过了一些等待/延迟或元素在 iframe 内?
  • 我得到:IndexError: list index out of range.
  • 不,我在问:如果你这样做:pairs = driver.find_elements(By.XPATH,'//div[@class="xxkkk20"]').text pairs 变量的内容是什么? pairs 应该包含父 div 元素内的全部文本
【解决方案3】:

试试这个

textValues = driver.find_elements_by_xpath('//div[@class="xxkkk20"]')text.split("\n")
for txt in textValues:
    print(txt.split(":")[1].strip())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多