如何使用href从xpath和scrapy从此站点提取URL?

时间:2018-09-18 21:40:01

标签: python xpath scrapy

我仍然了解xpath的要点及其工作原理(一段时间以来一直在尝试从w3中学习),但是我有点困惑如何从此网页中提取这段代码:{{3} }(我一直在这里查看源代码:view-source:https://www.pro-football-reference.com/years/2005/)。我想从第363-383行中提取URL。

<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 :(得分:1)

有两种类似的方法可以在那里解析hrefs

更短(但更容易出错,具体取决于HTML其余部分的外观) x('//ul[@class=""]//a/@href')

含义:任何“ a”是具有空类属性的任何“ ul”节点的后代(直接或不直接)。

更长的表达式,但是更容易出错,因为它更加明确 x('//ul[@class=""]/li/a/@href')

含义::任何“ a”节点是任何“ li”节点的直接后代,而任何“ li”节点是任何具有空类属性的“ ul”节点的直接后代。

此外,您可以尝试引用更高级的xpath函数(尽管并非每个框架都支持),例如字符串长度(用于class属性)。

答案 1 :(得分:0)

“ //”将选择匹配的任何后代,而“ /”仅选择匹配的直接后代。由于不是的直接后代,所以我认为您应该是选择器:

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

仅获取内部文本以“ Week”开头的元素:

$x('//ul[@class=""]//a[starts-with(.,"Week")]/@href')