美文网首页
Python爬虫的3种内容解析方式

Python爬虫的3种内容解析方式

作者: ShowMeCoding | 来源:发表于2020-06-21 21:08 被阅读0次

    ⾸先创建⼀个html⽂件:my.html ⽤于测试XPath\Beautiful Soup\PyQuery的解析效果

    <!DOCTYPE html>
    <html>
    <head>
        <title>我的⽹⻚</title>
    </head>
    <body>
        <h3 id="hid">我的常⽤链接</h3>
        <ul>
            <li class="item-0"><a href="http://www.baidu.com">百度</a></li>
            <li class="item-1 shop"><a href="http://www.jd.com">京东</a></li>
            <li class="item-2"><a href="http://www.sohu.com">搜狐</a></li>
            <li class="item-3"><a href="http://www.sina.com">新浪</a></li>
            <li class="item-4 shop"><a href="http://www.taobao.com">淘宝</a></li>
        </ul>
    </body>
    </html>
    

    1 Xpath

    1.1 Xpath简介
    • XPath(XML Path Language)是⼀⻔在XML⽂档中查找信息的语⾔。
    • XPath 可⽤来在XML⽂档中对元素和属性进⾏遍历。
    • 需要使用 pip install lxml 安装lxml库
    1.2 使用Xpath进行解析
    # 使用XPath解析HTML网页内容
    from lxml import etree
    
    # 准备html文件信息(在真实项目中是从互联网中爬取网页信息)
    f = open("./my.html","r",encoding="utf-8")
    content = f.read()
    f.close()
    
    # 使用lxml创建节点选择器对象
    html = etree.HTML(content)
    
    # 使用xpath解析网页中的元素节点(标签)
    #result =  html.xpath("/*")   #获取所有直接子节点
    #result =  html.xpath("//*")  #获取所有子节点
    result = html.xpath("//li")   #获取所有li子节点
    for t in result:
        print(t.tag,end=" ")
    print()
    
    #解析网页中所有的超链接信息
    #result = html.xpath("//li")   #获取所有li子节点
    #result = html.xpath("//li[@class='item-0']")  #获取所有class属性值为item-0的li子节点
    result = html.xpath("//li[contains(@class,'shop')]")  #获取所有class属性值含有shop的li子节点
    #遍历
    for t in result:
        #获取当前li节点中的a子节点
        a = t.find("a")
        #输出当前a节点的属性和内容
        print(a.text,":",a.get("href"))
    

    2 Beautiful Soup

    2.1 Beautiful Soup解析库简介
    • BeautifulSoup是Python的⼀个HTML或XML解析库,最主要的功能就是从⽹⻚爬取我们需要的数据。
    • BeautifulSoup将html解析为对象进⾏处理,全部⻚⾯转变为字典或者数组,相对于正则表达式的⽅式,可以⼤⼤简化处理过程。
    • Beautiful Soup3 ⽬前已经停⽌开发,我们推荐在现在的项⽬中使⽤Beautiful Soup4,
    • 在已经安装lxml库的前提下安装Beautiful Soup解析器:pip install beautifulsoup4
    2.2 Beautiful Soup解析库的使用
    # 导入模块
    from bs4 import BeautifulSoup
    
    # 读取html文件信息(在真实代码中是爬取的网页信息)
    f = open("./my.html",'r',encoding="utf-8")
    content = f.read()
    f.close()
    
    # 创建解析对象
    soup = BeautifulSoup(content,"lxml")
    
    • 第一种:节点选择器解析
    # 获取ul,并从ul中获取所有子节点
    blist = soup.ul.children
    #遍历
    for li in blist:
        if li.name == 'li': # 判断必须是li节点
            a = li.a
            print(a.string,":",a.attrs['href']) # 输出a标签节点的内容和属性
    
    • 第二种:方法选择器
    blist = soup.find_all("li") #获取所有li节点
    #遍历内容进行输出
    for li in blist:
        a = li.find("a")  #获取li中的a节点
        print(a.get_text(),":",a.attrs['href']) #输出a标签节点的内容和属性
    
    • 第三种:CSS选择器
    blist = soup.select("ul li")  # 获取ul中的所有li节点
    #遍历
    for li in blist:
        a = li.select("a")[0]  # 获取li中a节点
        print(a.get_text(), ":", a.attrs['href'])  # 输出a标签节点的内容和属性
    

    3 PyQuery

    3.1 PyQuery解析库简介
    • PyQuery库也是⼀个⾮常强⼤⼜灵活的⽹⻚解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你⾮常绝佳的选择。
    • PyQuery 是 Python 仿照 jQuery 的严格实现。
    • 语法与 jQuery ⼏乎完全相同,所以不⽤再去费⼼去记⼀些奇怪的⽅法了。
    • PyQuery的安装: pip install pyquery
    3.2 PyQuery解析库的使用
    # 主要用于解析文件
    from pyquery import PyQuery
    with open("./my.html", "r", encoding="utf-8")as f:
        content = f.read()
    result = PyQuery(content)
    # print(result('title'))
    # print(result('#hid'))
    '''
    print(result("ul li a"))        # 获取url中li中的a
    print(result("a:first"))        # 获取网页中第一个a
    print(result("a:last"))         # 获取网页中最后一个a
    print(result("a:eq(2)"))        # 获取网页中索引位置为2的a
    '''
    
    # # 获取class属性值为shop的所有节点
    # print(result('.shop'))
    #
    # # 获取class属性值shop的所有li节点
    # print(result('li.shop'))
    
    # print(result("a[href*='jd']"))  # 获取href属性值中含有‘jd’的a节点
    
    # 获取网页中所有ul中li的a节点
    alist = result("ul li a")
    for a in alist.items():
        # print(a)
        # print(a.attr('href'))
        # print(a.text())
        print(a.text(),":",a.attr.href)
    

    4 解析结果

    百度 : http://www.baidu.com
    京东 : http://www.jd.com
    搜狐 : http://www.sohu.com
    新浪 : http://www.sina.com
    淘宝 : http://www.taobao.com
    

    相关文章

      网友评论

          本文标题:Python爬虫的3种内容解析方式

          本文链接:https://www.haomeiwen.com/subject/dbmlxktx.html