欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫之xpath数据解析

程序员文章站 2024-01-27 14:14:10
...

利用xpath进行数据解析,爬取ppt模板

一、准备工作和xpath简单介绍

1、安装和导入相应的包和模块

需要用到的包(模块):requests,lxml,os;
requests用来发起请求,lxml用于解析,os用于创建一个文件夹来保存爬取到的模板

2、xpath简介

(1)xpath解析的原理:

<1> 实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。
<2> 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。

(2)环境的安装:

pip install lxml

(3)实例化etree对象:

<1>.将本地的html文档中的源码数据加载到etree对象中: etree.parse(filePath)
<2>.可以将从互联网上获取的源码数据加载到该对象中 :etree.HTML(‘page_text’)

(4)xpath表达式:
  • 单斜杠 /:表示的是从根节点开始定位。表示的是一个层级
  • 双斜杠//:表示的是多个层级。可以表示从任意位置开始定位
  • 属性定位://div[@class=‘song’] ==>tag[@attrName=“attrValue”]
  • 索引定位://div[@class=“song”]/p[3] ,注意索引是从1开始的。
  • 取文本:
    /text() 获取的是标签中直系的文本内容
    //text() 标签中非直系的文本内容(所有的文本内容)
    -取属性:/@attrName ==>img/src(取img标签中src属性)

二、需求分析和编写程序

首页的url是:“http://www.ypppt.com/moban/lunwen/”,分析发现要下载一个ppt模板首先要在首页点进去该模板的详情页面,再点击“点击下载”跳转到下载页面,在下载页面选择下载地址。因此,可以分为3部分进行分析。

1、对首页的分析:得到详情页的url

Python爬虫之xpath数据解析
详情页面的URL的一部分就是a标签的href属性,而a标签所在位置是在(ul[@class=“posts clear”]/li/a[1]), 这样就很容易取得a标签的href属性了,再进行拼接就可以得到详情页的url了。

url = 'http://www.ypppt.com/moban/lunwen/'
headers={
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
        }
    #首页的数据
    page_text = requests.get(url=url, headers=headers).text
    #创建一个首页的etree对象,对首页进行数据解析
    tree = etree.HTML(page_text)
    #首页的a标签的href属性
    start_page_a_href_list = tree.xpath('//ul[@class="posts clear"]/li/a[1]/@href')

2、对详情页面的分析:得到下载页面的url

Python爬虫之xpath数据解析

不难发现下载页面的url一部分在a标签的href属性中,a标签在(div[@class=“button”]/a),把得到的下载页面的url存放在一个列表中。

download_url_list = []
    for start_page_a_href in start_page_a_href_list:
        detail_url = 'http://www.ypppt.com/'+start_page_a_href
        #详情页的数据
        detail_page_text =requests.get(url=detail_url,headers=headers).text
        #对详情页的数据进行解析、
        detail_tree = etree.HTML(detail_page_text)
        #详情页a标签的href属性
        detail_a_href = detail_tree.xpath('//div[@class="button"]/a/@href')[0]
        download_url_list.append('http://www.ypppt.com'+detail_a_href)

3、对下载页面的分析:得到下载地址并爬取ppt模板

Python爬虫之xpath数据解析
Python爬虫之xpath数据解析
这是PPT模板的下载地址和名字,可是名字是“xxxxxxxx-下载页”,所以要进行字符串的切割。

    for download_url in download_url_list:
        #下载页面的数据
        download_page_text = requests.get(url=download_url,headers=headers).text
        #解析下载页面的数据
        download_tree = etree.HTML(download_page_text)
        #下载地址
        download_a_href = download_tree.xpath('//ul[@class="down clear"]/li/a/@href')[0]
        #ppt的二进制数据
        ppt_data = requests.get(url=download_a_href, headers=headers).content
        #ppt名字
        ppt_name = download_tree.xpath('//div[@class="de"]/h1/text()')[0]
        #字符串的分割
        ppt_name1 = ppt_name.split('-')[0]+'.zip'
        #路径
        ppt_path = 'ppt/' + ppt_name1
        with open(ppt_path, 'wb') as fp:
            fp.write(ppt_data)
            print(ppt_name1, '下载成功!!!')

三、执行结果

这里是爬取5页PPT模板
Python爬虫之xpath数据解析
Python爬虫之xpath数据解析
完整程序的代码:https://download.csdn.net/download/qq_45694646/12613783

相关标签: python