Создать объект списка из «объекта _ElementUnicodeResult модуля lxml.etree» - PullRequest
1 голос
/ 06 мая 2019

Я новичок в Python и надеюсь почерпнуть данные о недвижимости с сайта списков.Мне удалось вытащить текст со страницы, но возвращенный объект не тот, который я ожидал.


# import modules
from lxml import html
import requests

# specify webpage to scrape
url = 'https://www.mlslistings.com/Search/Result/e1fdabc8-9b53-470f-9728-b6ab1a5d1204/1'
page = requests.get(url)
tree = html.fromstring(page.content)

# scrape desired information
address_raw = tree.xpath('//a[@class="search-nav-link"]//text()')
price_raw = tree.xpath('//span[@class="font-weight-bold listing-price d-block pull-left pr-25"]//text()')

Как и ожидалось, объекты address_raw и price_raw являются списками.Но значения, содержащиеся в этом списке, не являются строками с полученными адресами и сразу видимыми ценами.Вместо этого они все говорят [_ElementUnicodeResult object of lxml.etree module].Ввод имени объекта (например, address_raw) в интерпретаторе показывает адреса в списке, как и print(address_raw).Как я могу создать простой список адресов и цен в виде строк, чтобы значения в списке не отображались как [_ElementUnicodeResult object of lxml.etree module]?

1 Ответ

0 голосов
/ 06 мая 2019

Вы можете использовать str() для приведения объекта к строке и map() для применения функции к каждому элементу списка:

from lxml import html
import requests

url = 'https://www.mlslistings.com/Search/Result/e1fdabc8-9b53-470f-9728-b6ab1a5d1204/1'
page = requests.get(url)
tree = html.fromstring(page.content)

address_raw = list(map(str, tree.xpath('//a[@class="search-nav-link"]//text()')))
price_raw = list(map(str, tree.xpath('//span[@class="font-weight-bold listing-price d-block pull-left pr-25"]//text()')))
print(type(address_raw[0])) # => <class 'str'>
print(type(price_raw[0]))   # => <class 'str'>
...