在学习scrapy中用xpath提取网页内容时,有时要先提取出一整个行标签内容,再从行标签里寻找目标内容。出现一个错误。
错误代码:
def parse(self, response): sel = scrapy.Selector(response) sel_li = sel.xpath('/html/body/div[2]/div[5]/div[1]/ul/li') for i in sel_li: print(i.xpath('//h5/a/text()').extract()[0])
结果:
大嘴巴第二季
大嘴巴第二季
大嘴巴第二季
大嘴巴第二季
大嘴巴第二季
大嘴巴第二季
...
提取到的内容都是第一个下的后续内容
修稿后代码:
def parse(self, response): sel = scrapy.Selector(response) sel_li = sel.xpath('/html/body/div[2]/div[5]/div[1]/ul/li') for i in sel_li: print(i.xpath('.//h5/a/text()').extract()[0])
结果:
大嘴巴第二季 新百战天龙第三季 丹麦淫妖第一季 糟糕历史第七季 无耻之徒第九季 ...
在子xpath内路径前加 . 表示从当前查找,之后后续内容正常得到
其他方法:
def parse(self, response): sel = scrapy.Selector(response) sel_li = sel.xpath('/html/body/div[2]/div[5]/div[1]/ul/li') for i in sel_li.extract(): print(scrapy.Selector(text=i).xpath('//h5/a/text()').extract()[0]) print(scrapy.Selector(text=i).xpath('.//h5/a/text()').extract()[0])