Python爬虫学习第三章-4.1.2-xpath解析基础代码
程序员文章站
2022-05-07 23:31:40
...
Python爬虫学习第三章-4.1.2-xpath解析基础代码
这一节主要是编写代码熟悉一下xpath的基础内容
html文件源代码为:
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>测试bs4</title>
</head>
<body>
<div>
<p>百里守约</p>
</div>
<div class="song">
<p>李清照</p>
<p>王安石</p>
<p>苏轼</p>
<p>柳宗元</p>
<a href="http://www.song.com/" title="赵匡胤" target="_self">
<span>this is span</span>
宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
<a href="" class="du">总为浮云能避日,长安不见使人愁</a>
<img src="http://www.baidu.com/meinv.jpg" alt="" />
</div>
<div class="tang">
<ul>
<li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂</a> </li>
<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还</a> </li>
<li><a href="http://www.126.com" title="qi">歧王宅里寻常见,崔九堂前几度闻</a> </li>
<li><a href="http://www.sina.com" title="du">杜甫</a> </li>
<li><a href="http://www.dudu.com" title="du">杜牧</a> </li>
<li><b>杜小月</b></li>
<li><i>度蜜月</i></li>
<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流</a></li>
</ul>
</div>
</body>
</html>
xpath方法的演示如下:
from lxml import etree
import requests
if __name__=="__main__":
#先实例化一个etree对象,然后调用etree对象中的xpath函数,将不同形式的xpath表达式作用到xpath表达式中,从而进行相关数据的解析和提取
#实例化好了一个etree对象,并将被解析的源码数据加载到该对象中。
tree = etree.parse('test.html')
#调用xpath方法,返回的是一个列表,xpath表达式是通过层级关系进行标签的定位,这里我们想用xpath表达式定位到title标签
r = tree.xpath('/html/head/title')#html前面加个斜线是指从根节点(根目录)开始遍历的,中间的/表示一个层级
print(r) #返回的是一个列表,里面的元素是一个包含标签内容的Element类型的对象[<Element title at 0x1dcaedc6688>]
#输出:[<Element title at 0x25ce42e6888>]
#获取body下面的div标签
t = tree.xpath('/html/body/div')
print(t) #返回的列表中是三个包含标签数据的element类型的对象
# 输出:[<Element div at 0x25ce42e6908>, <Element div at 0x25ce42e6948>, <Element div at 0x25ce42e6988>]
e = tree.xpath('/html//div') #两个//表示的是多个层级,相当都bs4中的空格,/就相当于bs4中>
print(e)
# 输出:[<Element div at 0x25ce42e6908>, <Element div at 0x25ce42e6948>, <Element div at 0x25ce42e6988>]
a = tree.xpath('//div')#从任意位置找div标签,也就是找html文件中的所有div标签
print(a)
# 输出:[<Element div at 0x25ce42e6908>, <Element div at 0x25ce42e6948>, <Element div at 0x25ce42e6988>]
b = tree.xpath('//div[@class="song"]') #//div指获取所有的div标签,用[@class="song"]来进行限制就可以通过属性定位,@后边是属性名称
print(b)
# 输出:[<Element div at 0x25ce42e6948>]
#定位到body下面,class属性值为song的div标签中的第三个p标签<p>苏轼</p>,也就是索引定位
c = tree.xpath('//div[@class="song"]/p[3]') #注意索引是从1开始的
print(c)
# 输出:[<Element p at 0x25ce42eefc8>]
d = tree.xpath('//div[@class="tang"]/ul/li[5]/a')
print(d)
# 输出:[<Element a at 0x25ce4306708>]
#
d_List_text = tree.xpath('//div[@class="tang"]/ul/li[5]/a/text()') #在最后加个text()就可以取到内容
print(d_List_text)
# 输出:['杜牧']
#
d_text = tree.xpath('//div[@class="tang"]/ul/li[5]/a/text()')[0] # 在最后加个text()就可以取到内容
print(d_text)
# 输出:杜牧
f = tree.xpath('//li[7]/i/text()')
print(f)
# 输出:['度蜜月']
g = tree.xpath('//div[@class="tang"]//text()') #//text() 获取的是标签中非直系的文本内容(也就是标签中所有的文本内容)
print(g)
# 输出:['\n ', '\n ', '清明时节雨纷纷,路上行人欲断魂', ' ', '\n ', '秦时明月汉时关,万里长征人未还', ' ', '\n ', '歧王宅里寻常见,崔九堂前几度闻', ' ', '\n ', '杜甫', ' ', '\n ', '杜牧', ' ', '\n ', '杜小月', '\n ', '度蜜月', '\n ', '凤凰台上凤凰游,凤去台空江自流', '\n ', '\n ']
#取属性:取img当中的src属性值
h = tree.xpath('//div[@class="song"]/img/@src') #取属性值可以是/@属性名称
print(h)
# 输出:['http://www.baidu.com/meinv.jpg']
上一篇: oracle用户、权限分配
下一篇: oracle角色和权限