python的三种数据解析方法:正则表达式 - bs4 - xpath

这段时间学了三个python里面数据解析的方法, 分别是正则表达式,bs4和xpath,分别用三个方式各写了一段代码。

感觉正则表达式是最难的,需要思考和记忆,其次是bs4,最后是xpath。还是用xpath比较顺手。这里写一下xpath的原理:


-xpath解析原理

-1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。

-2.通过调用etree对象中的xpath方法结合者xpath表达式实现标签的定位和内容的捕获。

-环境的安装:

-pip install lxml

-如何实例化一个etree对象

-1.将本地的html文本中的源码数据加载到etree对象中:

etree.parse()

-2.将互联网上获取的源码数据加载到该对象中:

etree.HTML('page_text')

- xpath('xpath表达式')

-xpath表达式:

- /:表示从根节点开始定位。表示一个层级

- //:表示多个层级。表示从任意位置开始定位

- 属性定位:

//div[@class='song'] 层级[@属性名称='属性值']

- 索引定位

//div[@class='song']/p[3] 索引是从1开始的

- 取文本

- /text() 获取的是标签中直系的文本内容

- //text() 获取的是标签中所有的文本内容

- 取属性:

- /@属性名称


放一个我用xpath解析壁纸图片网站源码的代码

# -*- coding:utf-8 -*-
import requests #导入库
from lxml import etree #导入xpath
import os   #导入文件夹


if __name__ == "__main__":
    #指定url
    url = "https://pic.netbian.com/4kdongman/"  #壁纸网站
    #UA伪装
    headers = {"UA伪装"}
    #发起请求
    response = requests.get(url=url,headers=headers)
    #可以手动设定响应数据的编码格式
    #response.encoding = 'utf-8'
    page_text = response.text
    #实例化对象,解析数据:src的属性值 alt的属性值
    tree = etree.HTML(page_text)
    list = tree.xpath('//ul[@class="clearfix"]//li')
    #创建文件夹
    if not os.path.exists('./bizhi'):
        os.mkdir('./bizhi')
    #建立for循环批量处理请求
    for li in list:
        #解析url
        image_url = 'https://pic.netbian.com'+li.xpath('./a/img/@src')[0]
        #解析url对应的文本内容
        image_name = li.xpath('./a/img/@alt')[0]+'.jpg'
        #通用处理中文乱码的解决方案
        image_name =image_name.encode('iso-8859-1').decode('gbk')
        #请求图片,数据化处理
        image_data = requests.get(url=image_url,headers=headers).content
        img_path = 'bizhi/'+image_name
        with open(img_path,'wb') as fp:
            fp.write(image_data)
            print(image_name,'下载成功!!!')

写完之后点击运行,会自动获取当前页面所有的图片,并保存到本地文件夹中。实现自动化爬取,如果想要获取所有页面的图片,只需要再建立一个翻页的for循环即可。不得不说python写爬虫实在是太简便了。

python yyds!

1 COMMENTS
  1. 1周前
    如山

    其实bs4也挺好用的

LEAVE A REPLY
loading