关键词搜索

源码搜索 ×
×

【Python爬虫】:Xpath表达式的使用

发布2021-01-29浏览335次

详情内容

假设我爬取了这样的一个html网页,前面的前端代码python基础教程如下所示:

<html xmlns="http://www.w3.org/1999/xhtml">
 <head> 
  <title>OK资源采集-最新影视资源大全</title> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <meta name="keywords" content="OK资源采集-最新影视资源大全" /> 
  <meta name="description" content="OK资源采集-最新影视资源大全" />
  <script>var SitePath='/',SiteAid='10',SiteTid='',SiteId='';</script>

<link href="/template/okokzy/css/home.css" rel="stylesheet" type="text/css" />

<script src="/template/okokzy/js/jquery_ldg.js"></script>

<script src="/template/okokzy/js/jquery.zclip.min.js"></script>

<script src="/template/okokzy/js/ldg.js"></script>

<script src="/js/jq/jquery.lazyload.js"></script>

<script src="/template/okokzy/js/home.js"></script>


 </head>

    我们想要获取其中的script标签后面的vb.net教程内容,因此我们可以使用Xpath来获取,假设我们想要获得第一个script标签处的值value,就可以使用表达式:

    Xpath(/html/head/script/text()[0]
    
    • 1

    这个表达式的含义是输出在html下的head下的第一个script标签处的文字,因为我们前面的代码:

    Xpath(/html/head/script/text()
    • 1

    会输出所有以script开头的对象,因此加上[0]限定为第一个script后面的文字。

    因此输出为:

    var SitePath='/',SiteAid='10',SiteTid='',SiteId='';
    
    • 1

    在Xpath表达式当中’//’ 表示前面的省略不计,直接跳过两层或者多层拿到后面的标签中所对应的对象。

    二.标签属性的使用
    假设我们想要爬取font标签当中具备某个color属性的文字内容,如下所示:

    OK资源站
    HTTPS 站请进入>>><font size=
    font这个标签之后显然会有很多不同的color,但是我们只想要这里color为“#000000”后面的文字内容,因此我c#教程们使用这样的表达式:

    r_two=tree.xpath(’//font[@color="#000000"]/text()’)
    这样就饿可以了。整体的代码如下所示:

    import requests
    from lxml import etree
    
    post_url = 'https://www.okzy10.com/'
    #cookie='lastCity=100010000; __zp_stoken__=ce26bZyQcLhoDK1A7M0RzPzMQEDJzHHpAQCJkUHtpSSFDSCkNeko0HBZxSywqeBxlHh8PIE4CLwgTSWsacwcdbEMNUBBzE2APASkfAktgOFskSn9HCTgkLmE7GFxecS8MGE4FGX99IHdsQHV5YQ%3D%3D; __c=1610949395; __g=-; __l=l=%2Fwww.zhipin.com%2F&r=https%3A%2F%2Fwww.google.com%2F&g=&s=3&friend_source=0&s=3&friend_source=0; __a=13532184.1600828409.1610683874.1610949395.205.23.3.205; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1610082805,1610683875,1610949395,1610949407; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1610949407'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36',
    }
    
    #解析本地的html
    #使用etree.parse
    #解析网页上的html
    #使用etree.HTML
    req = requests.get(post_url,headers=headers)
    
    #print(req.text)
    with open('ok_resource.html','w',encoding='utf-8') as fp:
        fp.write(req.text)
    
    #使用xpath表达式对etree对象进行解析
    parser = etree.HTMLParser(encoding="utf-8")
    tree=etree.parse('ok_resource.html',parser=parser)
    r=tree.xpath('/html/head/script/text()')[0]
    r_two=tree.xpath('//font[@color="#000000"]/text()')
    print(r)
    print(r_two)
    
      23
    • 24
    • 25
    • 26

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载