разница между запросом xpath в python и в сети - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь перебрать реальных игроков команды определенной футбольной команды. Я заметил, что в Википедии игроки, принадлежащие команде, имеют одинаковый формат. В этом формате есть 4-6 столов, 2 для игроков первой команды, остальные - для одолженных игроков или для молодых игроков и т. Д. c ... при использовании онлайн-инструментов, запрашивающих страницу Википедии с помощью запросов XPath, я получаю результат, который я хочу, но когда я использую его с библиотекой Python l xml. html и запрашивает библиотеку вместо того, чтобы видеть таблицы игроков как 4-6 таблиц, он видит его как один элемент таблицы, который делает его головная боль, чтобы извлечь только игроков первой команды.

вот мой python код:

def create_team_ontology(ontology_graph,team_url,team_name):
     res = requests.get(team_url)
     doc = lxml.html.fromstring(res.content)
     print(team_url)
     club_players = doc.xpath("//table[3]/tbody//tr[position() > 1]//td[4]//span/a/@href")
     for player_suffix_url in club_players:
        print(player_suffix_url+'\n')
        player_url = wiki_prefix + player_suffix_url
        get_player_info(ontology_graph,player_url,team_name)

и вот пример вики-страницы Арсенала https://en.wikipedia.org/wiki/Arsenal_F.C. в исходном файле легко проверить, что каждая таблица - это отдельный элемент. но мой список игроков в клубе содержит список всех игроков в категории «Игроки» на приведенной выше странице.

, и это код, который я запускаю в Интернете, используя inspect, затем ctrl + f // table [3] / tbody. // tr [position ()> 1] // td [4] // span / a / @ href

1 Ответ

1 голос
/ 29 апреля 2020

Ваш код почти работает. Если я использую XPath, который я разместил в другой топи c, с:

from lxml import html
import requests
res = requests.get('https://en.wikipedia.org/wiki/Arsenal_F.C.')
doc = html.fromstring(res.content)
club_players = doc.xpath('//span[@id="Players"]/following::table[1]//span[@class="fn"]//@href')
for player_suffix_url in club_players:
        print(player_suffix_url+'\n')

, вы получите URL-адреса 27 игроков первой команды Арсенала.

/wiki/Bernd_Leno

/wiki/H%C3%A9ctor_Beller%C3%ADn

/wiki/Kieran_Tierney

/wiki/Sokratis_Papastathopoulos

/wiki/Dani_Ceballos

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