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

Python 如何使用href使用xpath和scrapy从该站点提取URL?,python,xpath,scrapy,Python,Xpath,Scrapy,我仍在了解xpath的要点以及它的工作原理(已经尝试从w3学习了一段时间),但我有点困惑如何从这个网页中提取这段代码:(我一直在这里查看源代码:查看源代码:)。我想从第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

我仍在了解xpath的要点以及它的工作原理(已经尝试从w3学习了一段时间),但我有点困惑如何从这个网页中提取这段代码:(我一直在这里查看源代码:查看源代码:)。我想从第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吗?任何帮助或建议都将不胜感激

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

$x('//ul[@class=""]//@href')
要仅获取内部文本以“周”开头的元素,请执行以下操作:


这里有两种类似的方法来解析
hrefs

更短(但更容易出错,具体取决于HTML的其余部分)

x('//ul[@class=”“]//a/@href')

意思:任何“a”都是具有空类属性的任何“ul”节点的后代(直接或非直接)

稍微长一点的表达式,但由于更显式,因此不太容易出错

x('//ul[@class=”“]/li/a/@href')

含义:任何“a”节点都是任何“li”节点的直系后裔,任何“ul”节点都是具有空类属性的直系后裔


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

第363-383行应该在哪里?我只看到
href
s按周区分…您好,感谢您的评论,它起了作用,但我仍然有一个问题,它选择了页面中的所有URL(我得到了134个)。有没有办法用周数来选择我想要的?我想我可以找到它们在数组中的位置并提取它们,比如使用
$x('//ul[@class=”“]/@href')[100]
,但我想知道是否有更优雅的方法(这样我就可以学习并熟悉XPath)。
$x('//ul[@class=""]//a[starts-with(.,"Week")]/@href')