Как извлечь URL с этого сайта с помощью xpath и scrapy, используя href? - PullRequest
0 голосов
/ 19 сентября 2018

Я все еще получаю суть xpath и как он работает (пытался некоторое время учиться у w3), но я как-то запутался, как извлечь этот раздел кода с этой веб-страницы: https://www.pro -football-reference.com / years / 2005 / (Я искал источник здесь: view-source: https://www.pro -football-reference.com / years / 2005 / ).Я хотел бы извлечь URL-адреса из строк 363 - 383.

<ul class="">
<li><a href="/years/2005/week_1.htm">Week 1</a></li>
<li><a href="/years/2005/week_2.htm">Week 2</a></li>
<li><a href="/years/2005/week_3.htm">Week 3</a></li>
<li><a href="/years/2005/week_4.htm">Week 4</a></li>
<li><a href="/years/2005/week_5.htm">Week 5</a></li>
<li><a href="/years/2005/week_6.htm">Week 6</a></li>
<li><a href="/years/2005/week_7.htm">Week 7</a></li>
<li><a href="/years/2005/week_8.htm">Week 8</a></li>
<li><a href="/years/2005/week_9.htm">Week 9</a></li>
<li><a href="/years/2005/week_10.htm">Week 10</a></li>
<li><a href="/years/2005/week_11.htm">Week 11</a></li>
<li><a href="/years/2005/week_12.htm">Week 12</a></li>
<li><a href="/years/2005/week_13.htm">Week 13</a></li>
<li><a href="/years/2005/week_14.htm">Week 14</a></li>
<li><a href="/years/2005/week_15.htm">Week 15</a></li>
<li><a href="/years/2005/week_16.htm">Week 16</a></li>
<li><a href="/years/2005/week_17.htm">Week 17</a></li>
<li><a href="/years/2005/week_18.htm">Wild Card</a></li>
<li><a href="/years/2005/week_19.htm">Divisional</a></li>
<li><a href="/years/2005/week_20.htm">Conf Champ</a></li>
<li><a href="/years/2005/week_21.htm">Super Bowl</a></li>
</ul>

Я пытался использовать $x('//ul[@class=""]/@href') в.консоль, но на самом деле это не работает.Может ли кто-нибудь помочь мне извлечь href из них?Буду признателен за любую помощь или совет!

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Существует два аналогичных способа разбора hrefs.

Более короткий (но более подверженный ошибкам, в зависимости от того, как выглядит остальная часть вашего HTML) x('//ul[@class=""]//a/@href')

Значение: Любое "a", являющееся потомком (прямым или нет) любого узла "ul" с пустым атрибутом класса.

Несколько длиннее выражение, но оно менее подвержено ошибкамболее явный x('//ul[@class=""]/li/a/@href')

Значение: Любой узел "a", являющийся прямым потомком любого узла "li", является прямым потомком любого узла "ul" с пустым атрибутом класса.

Кроме того, вы можете попытаться сослаться на более интересные функции xpath (хотя и не поддерживаются всеми фреймворками), например длину строки (для атрибута class).

0 голосов
/ 19 сентября 2018

"//" выберет любого потомка, который соответствует, в то время как "/" выбирает только прямых потомков, которые соответствуют.Так как не является прямым потомком, я думаю, что ваш селектор должен быть следующим:

$x('//ul[@class=""]//@href')

Чтобы получить только элементы, внутренний текст которых начинается с «Недели»:

$x('//ul[@class=""]//a[starts-with(.,"Week")]/@href')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...