如何在XPath中遍历列表并插入索引变量批量获取对应href属性
原有写法的逻辑偏差在于,你把format()方法作用在了response.xpath()返回的Selector对象上,而非XPath查询字符串本身,所以无法完成变量插值,自然得不到预期结果。同时需要注意:XPath中的节点位置索引默认从1开始计数,和Python的0起始索引规则不同。
方案1:动态插入索引变量实现遍历
先完成字符串插值再传入XPath查询方法即可,两种常用写法如下:
- format写法兼容所有Python3版本:
for i in range(1, 16): xpath_expr = './/li[{}]/a[@class="pagination__item"]/@href'.format(i) # 单条匹配用get(),多条匹配用getall() test_page = response.xpath(xpath_expr).get()
- Python3.6+支持的f-string写法更简洁:
for i in range(1, 16): test_page = response.xpath(f'.//li[{i}]/a[@class="pagination__item"]/@href').get()
方案2:XPath内置规则批量筛选指定区间节点
不需要写Python循环,直接用XPath的position()函数即可一次性提取位置在1-30之间的所有href属性,执行效率更高:
# 直接提取前30个符合条件的li对应的href,返回结果为列表 href_list = response.xpath('.//li[position() >= 1 and position() <= 30]/a[@class="pagination__item"]/@href').getall()
内容的提问来源于stack exchange,提问作者me.limes
相关产品推荐
相关产品推荐

