爬取网页内容的时候,往往网页标签比较复杂,对于这种情况,需要用xpath的starts-with和string(.)功能属性来处理,具体看事例
#encoding=utf-8 from lxml import etree html1 = ''' <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <div id="test-1">需要的内容1</div> <div id="test-2">需要的内容2</div> <div id="testfault">需要的内容3</div> </body> </html> ''' #提取id属性为test开头的的内容,需要使用xpath的start-with属性 selector = etree.HTML(html1) content = selector.xpath('//div[starts-with(@id,"test")]/text()') for each in content: print each #提取多个标签层级的内容,需要使用xpath的string(.)将内容转为字符串再获取 html2 = ''' <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <div id="test3"> 我左青龙, <span id="tiger"> 右白虎, <ul>上朱雀, <li>下玄武。</li> </ul> 老牛在当中, </span> 龙头在胸口。 </div> </body> </html> ''' selector1 = etree.HTML(html2) data = selector1.xpath('//div[@id="test3"]')[0] info = data.xpath('string(.)') content = info.replace('\n','').replace(' ','') print content
输出:
需要的内容1
需要的内容2
需要的内容3
我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。