如何用scrapy选择表?

时间:2016-01-22 15:35:41

标签: python xpath scrapy

我正在抓取包含表格的网页,我可以通过这种方式提取我感兴趣的链接:

 response.xpath('//*[@id="mw-content-text"]/table[1]/tr/td[1]/a/@href').extract()

现在,如果我这样写,有3个或更多表:

response.xpath('//*[@id="mw-content-text"]/table/tr/td[1]/a/@href').extract()

我得到了所有表的数据,但是如果我只想要n个表,那么有一种方法可以在不使用n表达式的情况下得到它, 像这样:

response.xpath('//*[@id="mw-content-text"]/table[1:n]/tr/td[1]/a/@href').extract()

2 个答案:

答案 0 :(得分:1)

假设n是一个整数,您可以在position()查询中使用XPath,如下所示:

'//*[@id="mw-content-text"]/table[position() <= {}]/tr/td[1]/a/@href'.format(str(n))

这将根据需要从第一个n表中选择数据。

或者,您可以按如下方式使用循环:

for i in range(5):
    response.xpath('//*[@id="mw-content-text"]/table[{}]/tr/td[1]/a/@href'.format(str(i))).extract()

答案 1 :(得分:1)

'//*[@id="mw-content-text"]/table[position()<n]/tr/td[1]/a/@href'