python爬虫lxml基本用法

一、xpath 常用规则

image.png

二、在python的安装使用

python3环境下安装命令

pip install lxml

三、实践

1、常用数据的导入

(1) 通过html文件导入
html = etree.parse('./index.html',etree.HTMLParser())
result = etree.tostring(html)
print(result.decode('utf-8'))
image.png
( 2)通过字符串转成html格式

用lxml解析html,利用etree.HTML解析字符串将字符串解析从html格式的文件, 经过处理后,部分缺失的节点可以自动修复,并且还自动添加了 body、html 节点

text = '''
    <ul>
        <li class="item-0"><a href="https://s1.bdstatic.com/">item 0 </a></li>
        <li class="item-1"><a href="https://s2.bdstatic.com/">item 1 </a></li>
        <li class="item-2"><a href="https://s3.bdstatic.com/">item 2 </a></li>
        <li class="item-3"><a href="https://s4.bdstatic.com/">item 3 </a></li>
        <li class="item-4"><a href="https://s5.bdstatic.com/">item 4 </a></li>
        <li class="item-5"><a href="https://s6.bdstatic.com/">item 5 </a></li>
    </ul>
'''
html = etree.HTML(text)
s = etree.tostring(html).decode()
print(s)
image.png

2、通过绝对路径查找

(1)获取某个标签的文本内容
方式一:
html_data = html.xpath('/html/body/ul/li/a')
for i in html_data:
    print(i.text)
image.png
# 方式二
html_data = html.xpath('/html/body/ul/li/a/text()')
print(html_data)
for i in html_data:
    print(i)
image.png
(2)通过@xx获取属性
html_data = html.xpath('/html/body/ul/li/a/@href')
print(html_data)
for i in html_data:
    print(i)
image.png
(3)通过[]获取指定属性标签的文本内容
html_data = html.xpath('/html/body/ul/li/a[@href="https://s1.bdstatic.com/"]/text()')
print(html_data)
image.png

3、通过相对路径获取内容

(1)获取标签内容
html_data = html.xpath('//li/a/text()')
print(html_data)
image.png
(2)获取标签属性
html_data = html.xpath('//li/a/@href')
print(html_data)
image.png
(3)获取指定属性标签的内容
html_data = html.xpath('//li/a[@href="https://s1.bdstatic.com/"]/text()')
print(html_data)
image.png
(4)获取指定索引的标签内容
html_data = html.xpath('//li[1]/a/text()')
print(html_data)
image.png

4、子节点

通过 / 或 // 即可查找元素的子节点或子孙节点。
 选择 li 节点的所有直接 a 子节点xpath为://li/a

5、父节点

html_data = html.xpath('//a[@href="https://s3.bdstatic.com/"]/../@class')
print(html_data)
image.png

6、常用属性

(1)匹配属性

标签[@属性=“”]

# 匹配属性
html_data = html.xpath('//a[@href="https://s1.bdstatic.com/"]/text()')
print(html_data)
(2)获取文本

@text()

# 匹配属性
html_data = html.xpath('//a[@href="https://s1.bdstatic.com/"]/text()')
print(html_data)
(3)获取属性

/@属性

# 获取属性
html_data = html.xpath('//li/a/@href')
print(html_data)
(4) 属性多值匹配

[contains(@属性,"值")]

html_data = html.xpath('//li[contains(@class, "a")]/a/text()')
print(html_data)
(5)多属性匹配
html_data = html.xpath('//li[contains(@class, "a") and 
contains(@name,"1")]/a/text()')
print(html_data)
(6)last 函数
# 获取最后一个
result = html.xpath('//li[last()]/a/text()')
print(result)

# 获取倒数第三个
result = html.xpath('//li[last()-2]/a/text()')
print(result)
(7)position函数
# 获取前两个
result = html.xpath('//li[position()<3]/a/text()')
print(result)
(8)中括号获取
# 获取第一个
result = html.xpath('//li[1]/a/text()')
print(result)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容