Извлечение таблицы, которая разделяет имя класса с другими таблицами при разборе HTML, используя lxml - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь получить некоторые данные из таблицы веб-страницы, используя lxml. Невозможно поймать конкретную таблицу. Я пытаюсь использовать тот же подход для другой таблицы, и он работает, но не могу понять, где я ошибаюсь.

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

wiki_url = 'https://en.wikipedia.org/wiki/Pascal_Siakam'

wiki_page=requests.get(wiki_url)

doc=lxml.html.fromstring(wiki_page.content)

#This ideally should return a list of tables with the specified class names
tables=doc.xpath('//table[@class="wikitable sortable jquery-tablesorter"]')

print(tables[0])

Ожидаемый вывод выглядит примерно так:

<Element table at 0x271d3a8b958>

Фактический вывод - ошибка индекса:

IndexError                                Traceback (most recent call last)
<ipython-input-74-6665a6637719> in <module>
      6 tables=doc.xpath('//table[@class="wikitable sortable jquery-tablesorter"]')
      7 
----> 8 print(tables[0])

IndexError: list index out of range

1 Ответ

1 голос
/ 23 октября 2019

Класс jquery-tablesorter устанавливается при загрузке jquery.

Возможно, вы выбрали классы с помощью браузера с javascript, но при извлечении с запросами jquery не будет выполняться.

import requests
from lxml import html, etree

wiki_url = 'https://en.wikipedia.org/wiki/Pascal_Siakam'
wiki_page=requests.get(wiki_url)
doc=html.fromstring(wiki_page.content)

#This ideally should return a list of tables with the specified class names
tables=doc.xpath('//table[@class="wikitable sortable"]')

print(tables[0])
...