xpath:根据父节点找兄弟节点

有些网站的节点标志比较“随性”,比如ebay的销售记录:http://offer.ebay.com/ws/eBayISAPI.dll?ViewBidsLogin&item=112797791375&rt=nc
当采集碰到干扰数据时,需要根据节点之间的关系来进行处理:

微信图片_20180409145506.png

代码如下:

   node_list = response.xpath('//th[contains(text(), "Date of Purchase")]/../../tr[@bgcolor]')[1:]  # ..表示当前节点的父节点
   for node in node_list :
       td_text_list = [td.xpath('string(.)').extract_first().replace('\xa0', ' ').strip() for td in node.xpath('./td')
                           if td.xpath('string(.)').extract_first()]   # 加上if判断是因为头尾的td节点文本为''
       yield td_text_list

   PS: './/td'与'//td'的区别在于,'.//td'表示当前节点下的所有td子节点,而'//td'表示根目录下的所有td子节点.

你可能感兴趣的:(xpath:根据父节点找兄弟节点)