Запутался в синтаксисе XPath - PullRequest
1 голос
/ 26 июня 2019
  1. Краткое описание проблемы:

Привет, я пытаюсь научиться использовать Scrapy Framework для python (доступно по адресу https://scrapy.org). Я следую вместе с учебникомЯ нашел здесь: https://www.scrapehero.com/scrape-alibaba-using-scrapy/,, но я собирался использовать другой сайт для практики, а не просто копировать их на Alibaba. Моя цель - получить игровые данные из https://www.mlb.com/scores.

Так что мне нужноиспользуйте Xpath, чтобы сообщить пауку, какие части html нужно очистить (я примерно на полпути на этой странице учебника на сайте scrapehero, в разделе «Создание селекторов Xpath для списка продуктов»). Проблема в том, что у меня возникла проблемачерт возьми, выяснить, какой синтаксис должен быть на самом деле, чтобы получить нужные мне фрагменты? Я все утро просматривал примеры с xpath, пытаясь выяснить правильный синтаксис, но я не смог его получить.

Справочная информация:

Итак, что я хочу - это от https://www.mlb.com/scores, Мне нужна команда xpath (), которая будет возвращать массив со всеми отображаемыми играми.

Следуя руководству, я понимаю, что для этого нужно проверить элементы на веб-странице, определить их класс / идентификатор и, в частности, команду xpath.

IЯ пробовал много вариантов, чтобы получить данные, но все они возвращают пустые массивы.

У меня нет никакой подготовки в XPath, поэтому я не уверен, что мой синтаксис где-то выключен или что-то,но я бы очень признателен за помощь в получении этой команды для возврата искомых объектов.Спасибо, что нашли время, чтобы прочитать это.

Код:

Вот некоторые попытки, которые не сработали:

response.xpath("//div[@class='g5-component--mlb-scores__game-wrapper']")
response.xpath("//div[@class='g5-component]")
response.xpath("//li[@class='mlb-scores__list-item mlb-scores__list-item--game']")
response.xpath("//li[@class='mlb-scores__list-item']")
response.xpath("//div[@!data-game-pk-id > 0]")'
response.xpath("//div[contains(@class, 'g5-component')]")
Ожидаемые результаты и фактические результаты

Мне нужна команда XPath, которая возвращает массив, содержащий объект селектора для каждой игры на странице mlb.com/scores.

Пока чтоЯ смог получить общие результаты, которые на самом деле не то, что я хочу (я могу получить селектор, который возвращает всю страницу, просто пропуская предикаты, но всякий раз, когда я пытаюсь указать, я получаю пустой массив).

Так что для всех моих попыток я либо получаю неправильные объекты, либо пустой массив.

1 Ответ

1 голос
/ 27 июня 2019

Вам необходимо всегда проверять исходный код HTML (Ctrl+U в браузере) на наличие нужных вам данных. На странице MLB вы обнаружите, что контент, который вы хотите проанализировать, загружается динамически с использованием JavaScript.

Вы можете попробовать использовать Scrapy-Splash для получения целевого контента из ваших start_urls или вы можете найти прямой HTTP-запрос, используемый для получения нужной информации (с помощью вкладки Сеть в Chrome Developer Tools) и анализа JSON:

https://statsapi.mlb.com/api/v1/schedule?sportId=1,51&date=2019-06-26&gameTypes=E,S,R,A,F,D,L,W&hydrate=team(leaders(showOnPreview(leaderCategories=[homeRuns,runsBattedIn,battingAverage],statGroup=[pitching,hitting]))),linescore(matchup,runners),flags,liveLookin,review,broadcasts(all),decisions,person,probablePitcher,stats,homeRuns,previousPlay,game(content(media(featured,epg),summary),tickets),seriesStatus(useOverride=true)&useLatestGames=false&language=en&leagueId=103,104,420
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...