Использование xpath для извлечения только текста, являющегося частью родительского узла - PullRequest
0 голосов
/ 28 октября 2019

Как мы можем только выбирать и извлекать текст, который является только частью родительского узла. Вот HTML-код, над которым я работаю. Мне нужно извлечь только "$ 1950", используя xpath. Когда я выбираю родительский узел и извлекаю его текстовое содержимое, я также получаю текстовое содержимое его потомков, но мне нужно только текстовое содержимое родительского узла.

<span class="rentRollup">

 <span class="longText">3 Bedrooms</span>
 <span class="shortText">3 Beds</span>
 $1,950

</span>

Я пытался использовать xpath, ноон печатает весь родительский узел, а также данные дочерних узлов.

url = 'https://www.apartments.com/214-taylor-st-raleigh-nc/cr6tchd/'
#intializing request headers
ua = UserAgent()
header = {'User-Agent':str(ua.chrome)}
response = requests.get(url, headers=header)
print(response)
byte_data = response.content 
source_code = html.fromstring(byte_data)
name=source_code.xpath("//*[contains(text(), '3 Bedrooms')]/..")
name=name[0].text_content()
print(name)

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Попробуйте так: после print(response) замените все на:

tree = html.fromstring(response.content)
name=tree.xpath("//span[@class='rentRollup']/text()")
name[2].strip()

Вывод:

'1,950'

0 голосов
/ 28 октября 2019

Следующее выражение XPath

//*[contains(*/text(), '3 Bedrooms')]/text()

выберет только те текстовые узлы, которые являются прямыми потомками интересующего родительского узла. Но все еще есть пробелы, от которых нужно избавиться.

...