xpath过滤标签内的其他标签获得全部内容

版权声明:转载请注明出处:gaoyang8320 https://blog.csdn.net/gaoyang8320/article/details/80724452

最近在爬一个网站https://www.malwaredomainlist.com/mdl.php主要是把表格中的数据爬下来

在浏览器中审查元素可知,所需要的数据在一个table标签中,如下图所示:
审查元素

可通过xpath提取出table中的tr标签,如下:

selector = Selector(response)
products = selector.xpath('//table[@class="table"]//tr')

然后对products 遍历获得每个tr标签内容:

for product in products[4:]:
    #对product的操作,product里面包含所需要的表格中的一行
    #从4开始遍历products,是因为有两个表头,可以在上一步中使用not剔除表头

之后看到第一列的内容在一个<nobr> 标签中,如下图
这里写图片描述
可以通过下面代码提取内容:

#td[1]表示该行的第一列
product.xpath('./td[1]/nobr//text()').extract_first()

但是

当我获得其他列内容的时候,发现里面有若干个<wbr> 标签,如果按照上面的代码只会获得第一个标签之前的内容,之后的内容则不会获得。如下图:
这里写图片描述

上述代码只获得了如下内容:

photoscape.ch/Setup.
sarahdaniella.com/sw

解决

解决代码:

data = ''
for result in product.xpath('./td[2]'):#td[2]表示该行的第二列
    data = data.join(result.xpath('string(.)').extract_first())

下图是两种代码的运行的效果:

这里写图片描述

可以看到该解决方案成功的获取到了<td>标签下的全部内容。

展开阅读全文

没有更多推荐了,返回首页