以下代码在 python 3.5 + jupyter notebook 中运行测试无误!
# 我们爬取网页的目的,无非是先定位到DOM树的节点,然后取其文本或属性值myPage = '''TITLE 我的博客
我的文章Hello,\nworld!
-- by Adam放在尾部的其他一些说明''' html = etree.fromstring(myPage)# 一、定位divs1 = html.xpath('//div')divs2 = html.xpath('//div[@id]')divs3 = html.xpath('//div[@class="foot"]')divs4 = html.xpath('//div[@*]')divs5 = html.xpath('//div[1]')divs6 = html.xpath('//div[last()-1]')divs7 = html.xpath('//div[position()<3]')divs8 = html.xpath('//div|//h1')divs9 = html.xpath('//div[not(@*)]')# 二、取文本 text() 区别 html.xpath('string()')text1 = html.xpath('//div/text()')text2 = html.xpath('//div[@id]/text()')text3 = html.xpath('//div[@class="foot"]/text()')text4 = html.xpath('//div[@*]/text()')text5 = html.xpath('//div[1]/text()')text6 = html.xpath('//div[last()-1]/text()')text7 = html.xpath('//div[position()<3]/text()')text8 = html.xpath('//div/text()|//h1/text()')# 三、取属性 @value1 = html.xpath('//a/@href')value2 = html.xpath('//img/@src')value3 = html.xpath('//div[2]/span/@id')# 四、定位(进阶)# 1.文档(DOM)元素(Element)的find,findall方法divs = html.xpath('//div[position()<3]')for div in divs: ass = div.findall('a') # 这里只能找到:div->a, 找不到:div->p->a for a in ass: if a is not None: #print(dir(a)) print(a.text, a.attrib.get('href')) #文档(DOM)元素(Element)的属性:text, attrib# 2.与1等价a_href = html.xpath('//div[position()<3]/a/@href')print(a_href)# 3.注意与1、2的区别a_href = html.xpath('//div[position()<3]//a/@href')print(a_href)