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