【问题标题】:Xpath expression to get all data inside the <p>Xpath 表达式获取 <p> 内的所有数据
【发布时间】:2019-12-05 12:49:50
【问题描述】:

我有这个 html:

<div class="et_pb_text_inner">
 <h3 style="text-align: center;"><i class="fal fa-ruler-combined"></i><br /> 1672 Square Feet</h3>
  <p style="text-align: center;">
    First Floor 1085 s.f.<br />
    Second Floor 587 s.f.<br />
    Porches 393 s.f.<br />
    Covered Parking 642 s.f.<br />
    Storage 187 s.f.<br />
    Under Roof 2894 s.f.
  </p>
</div>

我的 Xpath 代码是:

//div[@class='et_pb_text_inner']/p/text()

但它只给了我第一个换行符之前的文本。

First Floor 1085 s.f.

有没有办法在段落元素中获取所有数据?有没有办法划清界限?

我想得到一个这样的字符串:

First Floor 1085 s.f.<br />Second Floor 587 s.f.<br />Porches 393 s.f.<br />Covered Parking 642 s.f.<br />Storage 187 s.f.<br />Under Roof 2894 s.f.

所以之后我会尝试清理数据。

我是 xpath 表达式的新手。

提前感谢您的帮助。 =) 抱歉我的英语不好。 :P

我的 .py 代码是:

import requests
from lxml import html


resp = requests.get(
    url="https://tyreehouseplans.com/shop/house-plans/beach-house-plans/crew-cut-house-plan/",
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
)

tree = html.fromstring(html=resp.text)

title = tree.xpath("//div[@class='et_pb_module_inner']/h1/text()")[0]
dimensions = tree.xpath("//div[@class='et_pb_text_inner']/p/text()")[0]


print(title)
print(dimensions)

【问题讨论】:

  • 你用的是什么工具?美丽的汤?
  • 也许//div[@class='et_pb_text_inner']/p/following::text() 会有所帮助。我不确定
  • 使用 lxml 模块,您的 xpath 表达式似乎完全符合您的要求。
  • 嗨,伙计,我正在使用 lxml...我必须从该网站的某些页面 (tyreehouseplans.com/shop/house-plans/beach-house-plans/…) 中抓取数据...您认为 BS4 更好吗?
  • 好的,我已经编辑了帖子。

标签: python xpath web-scraping python-requests lxml


【解决方案1】:

text()返回一个文本节点,&lt;p&gt;标签包含6个这样的节点,所以需要去掉索引[0]。您还需要提供更准确的xpath 以删除不需要的结果

dimensions = tree.xpath("//h3[contains(., '1672 Square Feet')]/following-sibling::p/text()")

将给出一个包含 6 个字符串的列表

['First Floor 1085 s.f.', '\nSecond Floor 587 s.f.', '\nPorches 393 s.f.', '\nCovered Parking 642 s.f.', '\nStorage 187 s.f.', '\nUnder Roof 2894 s.f.']

【讨论】:

  • 嘿@Guy 非常感谢!它给了我继续编码的想法......谢谢=)
猜你喜欢
  • 2011-08-29
  • 1970-01-01
  • 2016-04-12
  • 2021-10-09
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
相关资源
最近更新 更多