当前位置:   article > 正文

python使用lxml库爬取短视频_怎么导入lxml.etree视频

怎么导入lxml.etree视频

        Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。

        目前python的开发越来越广泛,设计到web、后端、桌面应用程序、软件开发、科学统计等方面。其广泛性、灵活性、移植性、易读性、简单性等特点越来越收欢迎。在大数据时代,我们获取大量数据的途径之一就是使用python来爬取数据,然后使用MYSQL数据来存储数据,使用大数据分析工具进行数据处理。

        下面来说一下今天的主题,爬虫。目前在python中各种获取网页源码的库有很多,第一种使用bs4中的BeautifSoup库来获取网页源代码;第二种使用lxml中的etree模块来获取网页源码等等,今天来说一下,比较简单的使用etree来爬取网站数据。

     1、lxml和XPath

        lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。XPath 即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择。XPath使用路径表达式在xml文档中选取节点,这里注意需要逐级表现要选取节点的父子关系。下面主要说一下Xpath的用法:

     1.1 XPath符号
      nodename 选取此节点的所有子节点
      /      从根节点选取
     //     从匹配选择的当前节点文档中,而不考虑他们位置
     .     选取当前节点。
    ..     选取当前节点的父节点
    @   选取属性
     *    表示通配
     |     连接多个表达式,做并集操作
     1.2 XPath路径表达
      bookstore  选取bookstore元素的所有子节点。
     /bookstore  选取根元素bookstore。 
          假如路径起始于正斜杠 。注释:假如路径起始于正斜杠 。注释:假如路径起始于正斜杠 。注释:假如路径起始于正斜杠

           ( / ( / ),则此路径始 ,则此路径始 终代表到某元素的绝对路径!
      bookstore/book  选取bookstore子元素中所有book元素。
      //book     选取所有book元素,而不管它们在文档中的位置。
      bookstore//book bookstore 选择bookstore元素的后代中所有book元素,而不管它们位于bookstore下的什么位置

     //@auth 选取所有名为auth的属性
     1.3 XPath谓语
    谓语表达了针对该层级节点的筛选条件,常见谓语如下

     /book[2]    表示在该级选取第二个book节点
     /book[last()]    表示在该级选取最后一个book节点
    /book[position()<5] 表示在该级选取前四个book节点
    /book[@auth]   表示在该级选取所有拥有auth属性的book节点
   /book[@auth="buka"]   表示在该级选取所有auth属性值为buka的book节点
   /book[price>35.00]   表示在该级选取price子元素的值大于35的book节点
 

2 爬虫分析

    我们如何爬取数据呢,第一步肯定是要知道我们需要爬取那个网站的数据,第二步就是我们要知道我们要爬取网页的什么数据,因为数据有很多,所以我们要选择性的爬取,第三步就是发送http请求,第四步就是获取网页源码并解析,第五步就是读取指定节点的数据并下载,第六步写文件。以上过程就是整个的爬取思路,前面两部很简单可以算作一步

     第一步和第二步 本人自己学习python,用来爬取的网站是包图网的短视频。首先我们找到包图网视频的页面,例如:

第三步 请求链接网站

  1. import requests
  2. from lxml import etree
  3. class Spiders(object):
  4. def start_request(self):
  5. reponse=requests.get("https://ibaotu.com/shipin/")
  6. html=etree.HTML(reponse.text)
  7. spider=Spiders()
  8. spider.start_request()
这里我用面向对象的方法定义了一个类,这个类主要实现爬取数据,那我们直接实例化一个类对象,就可以调用爬取了。这里需要所以说一下request是我们请求网页必须要用的库,lxml中的etree是用来解析网页源码。而HTML是模块提供给我们将网页源码翻译成html格式。

  第四步和第五步  解析网页源码

      第三步之后我们将网页翻译成html格式,然后使用etree中的XPath来读取指定节点的文本值,可以无视节点的位置,我们在页面通过F12可以看到一些网站的页面源码。例如:

        因为xpath可以无视节点的位置,所以我们直接用鼠标放到对应的位置就可以看到网页对应的源码,如上所示,首先我们要获取到下载视频的标题,其次就是要获取到视频的下载地址。我们可以看到标题在<span class="video-title">节点的文本值,而视频的在<div class="video-pay">节点的属性值“src”的文本值就是我们的要下载的视频。那如何写呢,看下面代码:

  1. list_title = html.xpath('(//span[@class="video-title"]/text())')
  2. src_list = html.xpath('(//div[@class="video-play"]/video/@src)')
  3. for tit, src in zip(list_title, src_list):
  4. self.down_mp4(tit, src)

       如果不知道xpath形参的格式怎么写,请看前面的解释。 前面两行代码可以将标题和视频连接下载下来,但是发现不是一一对应的,所以这里我们使用zip函数来使下载的标题和连接达到一一对应,接下来我们应该下载视频,所以我们重新封装一个函数主要用来写文件即 down_mp4

  第六步  保存文件

       我们要下载好的视频格式是 “标题.MP4”,然而我们知道互联网目前使用最多的是http协议,在上面那一步的时候发现src属性的文本值没有带http: 直接是//pic.ibaotu.com/17/86/09/744888piCPpU.mp4_10s.mp4 所以这里需要处理一下,

  1. #下载视频
  2. def down_mp4(self, tit, src):
  3. file_name=tit+".mp4"
  4. print("正在抓取的视频:"+file_name)
  5. content = requests.get("http:" + src).content
  6. # 保存数据
  7. try:
  8. with open(file_name, "wb") as f:
  9. f.write(content)
  10. except:
  11. print("抓取错误")

      这里在写数据的时候使用了异常处理机制。这样我们就实现了整个数据的爬取,我们就可以在工程目录下面看到爬取的小视频了,因为我们目前只爬取了一页的数据,需要多页爬取的时候,需要修改第三步中的url 这个我们可以多翻几页就可以看到规律了。这里要说一点就是视频总页数只有223页,但是python的处理的是左闭右开,所以在循环的时候要写到224,这样才可以爬取到最后一页的数据。

 

     好了,以上就是本人第一次爬虫的成果了,由于自学很多东西不是很懂,里面有解释错误的地方,希望各位能够不吝赐教。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/396594
推荐阅读
相关标签
  

闽ICP备14008679号