【发布时间】: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