Получить список кортежей в Python с помощью Xpath

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

page = requests.get('url')
tree = html.fromstring(page.content)
list_a = tree.xpath('//div[@class="a"]/text()')
list_b = tree.xpath('//div[@class="b"]/text()')

list_a и list_b должны быть объединены в уникальный список, чтобы каждый элемент одного и того же индекса образовывал кортеж.

Может быть, я мог бы сделать это, манипулируя обоими списками, но я предпочитаю получать список кортежей одним вызовом xpath, если это возможно.

2 ответа

Вы можете сначала получить список элементов с помощью:

result = tree.xpath('//div[@class="a" or @class="b"]/text()')

который сгенерирует список элементов, которые соответствуют одному из двух ограничений. Далее мы можем zip их вместе с:

result = iter(result)
result = list(zip(result,result))

Это делает один вызовxpath, а затем использует некоторую постобработку для получения кортежей. Обратите внимание, что если два <td class="a"> теги встречаются до <td class="b"> тег, они будут упакованы в один кортеж. Поэтому важно, чтобы <td class="a"> а также <td class="b"> чередуются.

Использовать ИЛИ в xpath

tree.xpath('//div[@class="a"]/text() | //div[@class="b"]/text()')
Другие вопросы по тегам