• lxml的使用(节点与xpath爬取数据)


    lxml安装

      lxml是python下功能很丰富的XML和HTML解析库,性能非常的好,是对libxml3和libxlst的封装。在Windows下载这个库直接使用 pip install lxml 即可。CentOS下载可使用以下命令。

     yum install libxml3-devel libxslt-devel 
    
     pip install lxml

    lxml构建HTM

      在lxml下,很大程度上运用了DOM树的概念,他能够结合XPath很方便的获取到我们想要的数据。

       在lxml中,我们必须学会一些最基本的使用方法,首先是他提供的etree。

      下面代码提供了使用etree构建HTML的基本方法

     1 '''
     2 @Description: lxml创建html页面
     3 @Version: 1.0
     4 @Autor: Montoin Yan
     5 @Date: 2020-02-05 20:01:17
     6 @LastEditors  : Montoin Yan
     7 @LastEditTime : 2020-02-05 21:06:31
     8 '''
     9 from lxml import etree
    10 
    11 root = etree.Element('html') #创建一个父节点
    12 body = etree.Element('body') #创建第二个节点
    13 
    14 root.append(body) #以root为父节点将body作为添加到root的字节点中
    15 print(etree.tostring(root))
    16 
    17 div1 = etree.SubElement(body,'div') #设置div块将其设置为body中的子节点
    18 div2 = etree.SubElement(body,'div') #同上
    19 
    20 print(etree.tostring(root,pretty_print=True).decode()) #按照root作为父节点将所有内容漂亮的打印出来
    21 
    22 etree.HTML(text) #解析HTML文档,并返回根节点

     lxml中etree模块使用

      lxml还提供了两个很有用的函数,即  

    etree.HTML(text)  #解析HTML文档,返回DOM根节点
    
    anode.xpath("xpath绝对路径")  #对节点使用xpath语法

      下面的例子使用lxml+xpath爬取豆瓣一周口碑榜

     1 '''
     2 @Description: lxml爬取豆瓣一周口碑榜
     3 @Version: 1.0
     4 @Autor: Montoin Yan
     5 @Date: 2020-02-05 21:16:02
     6 @LastEditors  : Montoin Yan
     7 @LastEditTime : 2020-02-05 21:44:28
     8 '''
     9 from lxml import etree
    10 import requests
    11 import random
    12 
    13 #设置多个请求头,防止被反扒措施进行拦截
    14 ua_list = [
    15     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
    16     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
    17     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
    18     "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
    19 ]
    20 #随机pick one
    21 ua = random.choice(ua_list)
    22 
    23 url = "https://movie.douban.com/"
    24 response = requests.request('GET',url,headers={
    25     'User-agent':ua
    26 })
    27 
    28 content = response.text
    29 # print(content) #HTML内容
    30 
    31 #XPath  //div[@class='billboard-bd']//tr//a/text()
    32 html = etree.HTML(content) #使用XPath解析上下文,返回DOM根节点
    33 titles = html.xpath("//div[@class='billboard-bd']//tr//a/text()") #依照XPath要求获取需要的文本
    34 for i in titles:
    35     print(i)
  • 相关阅读:
    cloud-api-service和cloud-iopm-web提交merge方法
    Java知识点-判断null、空字符串和空格
    Windows本机搭建Redis
    api-gateway-engine知识点(2)
    能够提高开发效率的Eclipse实用操作
    IOP知识点(2)
    获取分辨率及dp/px换算
    Android软件自动更新(自定义处理,不使用第三方)
    友盟自动更新参数详解
    [Android]ping -c 1 -w 100 sina.cn的解析
  • 原文地址:https://www.cnblogs.com/yandashan666/p/12266829.html
Copyright © 2020-2023  润新知