Получить список кортежей в 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()')