咪咪学会了如何使用XPath进行数据爬虫,我妈妈也不担心PPT模板的缺乏,悄,Xpath,再也,不够

发表时间:2020-11-16


前言

使用python进行页面解析时,有三种方式:正则表达式、bs4、以及Xpath。其中Xpath是三种方法中最简便也是用得最广的一种。但是对于新手来说,编写代码来定位标签仍然是一个不小的难题。在我第一次使用Xpath的时候,试错了将近2h也没搞好标签定位,这里介绍我的第一个项目时,顺带推销个超好用的Xpath定位工具——插件:XPath Helper Chrome(但是个人的看法,还是要尽量自己写,不能仅仅依靠Helper,可以作为一种对比工具,看你的答案和Helper有什么区别?)


一、Xpath是什么

度娘说:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。用于定位HTML页面中的某一元素。

通过一张网图我们可以清晰看到HTML的组成部分,一般我们用Xpath确定路径来定位树形结构中的某个叶子节点。
在这里插入图片描述
使用XPath Helper Chrome我们能快速得出节点的绝对路径和相对路径。(用电脑截图有点问题,此处继续借用网图)
在这里插入图片描述
绝对路径比较直观、好理解,但是不灵活,相当于从一棵树的底部往上数,经过哪个树根、哪片树叶都数的清清楚楚。
一个绝对路径的例子:/html/body/div[1]/div[3]/div[1]/div[3]/div[1]/h3/a

而相对路径则是我们最常使用的一种,以“//”开头,从任意节点开始,一般我们会选取一个可以唯一定位到的元素开始写,可以增加查找的准确性。 在这里插入图片描述

二、使用步骤

1.爬取网页PPT的一个实践

环境搭建:pycharm2020.2版,加载requests模块、lxml模块、os模块。
爬取对象:一个网页可供免费下载PPT的第一页。

代码如下:

import requests
from lxml import etree
import os

if __name__ =="__main__":
    url = 'http://sc.chinaz.com/ppt/free.html'
    headers = {
        'User_Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers)
    response.encoding = 'utf-8'
    page_text = response.text
    if len(page_text)>100:
        print('页面数据爬取成功')
        
    #实例化一个对象
    tree = etree.HTML(page_text)
    list = tree.xpath('//*[@id="container"]/div')
  
    #创建一个文件夹
    if not os.path.exists('./PPT素材4'):
        os.mkdir('./PPT素材4')
        
    #遍历数据解析加进行局部解析
    for ppt_detail in list:
        ppt_name = ppt_detail.xpath('./p/a/text()')[0]+'.rar'
        ppt_link = "http:"+ppt_detail.xpath('./p/a/@href')[0]
        
    #获得了每个ppt的链接,向每个链接发起请求
        ppt_response = requests.get(url=ppt_link,headers=headers)
        ppt_page_text = ppt_response.text
  
    #实例化Xpath对象
        tree2 = etree.HTML(ppt_page_text)
        list2_link = tree2.xpath('//*[@id="down"]/div[2]/ul/li[1]/a/@href')[0]
        ppt_downlode =requests.get(url=list2_link,headers=headers).content

    #获得了该页ppt的下载链接,应该进行持久化储存
        PPt_path = 'PPT素材4/' + ppt_name
        with open(PPt_path, 'wb') as fp:
            fp.write(ppt_downlode)
            print(ppt_name, '下载成功!!!')

2.数据存储

在这里插入图片描述


总结

简单地介绍一个工具,对Xpath的两种路径进行说明,并使用Xpath来进行爬虫实践。

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free