Как получить массив значений (несколько значений) из одного селектора xpath? - PullRequest
1 голос
/ 23 марта 2019

Я хочу извлечь как текст ссылки, так и адрес ссылки из всех ссылок на веб-сайте. я хочу сразу извлечь эти данные и сохранить их в объекте.

# here is what i tried in python: 
urls = response.xpath('//a[@class="link-on-click grayhover"]/@href|/span/text()').extract()

// here is what the html code looks like: 
<div>
    <a class="link-on-click grayhover" 
        href="/brows/cars">
        <span>cars list</span>
    </a>
</div>

Я хочу, чтобы результат был таким:

 {url : "/brows/cars", text:'cars list'}

Ответы [ 2 ]

2 голосов
/ 23 марта 2019

Попробуйте получить значения в списке словарей, как показано ниже:

my_list = []
links = response.xpath('//a[@class="link-on-click grayhover"]')
for link in links:
    my_list.append({'url': link.xpath('./@href').extract_first(), 'text': link.xpath('./span/text()').extract_first()})
1 голос
/ 23 марта 2019

Посмотрим, попадет ли это туда:

source = """
<div>
<a class="link-on-click grayhover" 
    href="/brows/cars">
    <span>cars list</span>
</a>

"" "

from lxml import etree
doc = etree.fromstring(source)
car_dict = {}
for ref in doc.xpath('//a'):    
   url = ref.get("href")
   for car in ref.xpath('//span'):
      car_text = car.text
   car_dict.update({'url':url,'text':car_text})
print(car_dict)

Вывод:

{'url': '/brows/cars', 'text': 'cars list'}

Тамвероятно, есть способы упростить это (понимание и т. д.), но это должно быть сделано в настоящее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...