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

使用Xpath进行数据爬虫,一个超好用的插件工具值得下载

程序员文章站 2022-03-22 16:55:45
...


前言

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


一、Xpath是什么

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

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

而相对路径则是我们最常使用的一种,以“//”开头,从任意节点开始,一般我们会选取一个可以唯一定位到的元素开始写,可以增加查找的准确性。使用Xpath进行数据爬虫,一个超好用的插件工具值得下载

二、使用步骤

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的两种路径进行说明,并使用Xpath来进行爬虫实践。