• python学习第八天


    解析库之bs4的基本使用方法

    '''
    pip install beautifulsoup4#安装bs4
    pip install lxml#安装lxml
    
    '''
    html_doc = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
    <p class="sister"><b>$37</b></p>
    
    <p class="story" id="p">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" >Elsie</a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.</p>
    
    <p class="story">...</p>
    """
    
    from bs4 import BeautifulSoup#从bs4中导入BeautifulSoup
    
    #调用BeautifulSoup实例化一个soup对象
    #参数一:解析文本
    #参数二:解析器(html.parser,lxml,....)
    soup=BeautifulSoup(html_doc,'lxml')
    print(soup)
    print('*'*100)
    print(type(soup))
    
    
    #对其美化
    html=soup.prettify()
    print(html)

    bs4之遍历文档树

    html_doc = """
    <html><head><title>The Dormouse's story</title></head><body><p class="sister"><b>$37</b></p><p class="story" id="p">Once upon a time there were three little sisters; and their names were<a href="http://example.com/elsie" class="sister" >Elsie</a>,<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;and they lived at the bottom of a well.</p><p class="story">...</p>
    """
    from bs4 import BeautifulSoup#从bs4中导入BeautifulSoup
    soup=BeautifulSoup(html_doc,'lxml')
    
    '''
    遍历文档树:
        1、直接使用
        2、获取标签的名称
        3、获取标签的属性
        4、获取标签的内容
        5、嵌套选择
        6、子节点,子孙节点
        7、父节点、祖先节点
        8、兄弟节点
    '''
    #1、直接使用
    print(soup.p)#查找第一个p标签
    print(soup.a)#查找第一个a标签
    
    # 2、获取标签的名称
    print(soup.head.name)#获取head标签的名称
    
    #3、获取标签的属性
    print(soup.a.attrs)#获取a标签中所有属性
    print(soup.a.attrs['href'])#获取a标签中href属性
    
    #4、获取标签的内容
    print(soup.p.text)  #$37
    
    #5、嵌套选择
    print(soup.html.head)  #<head><title>The Dormouse's story</title></head>
    
    #6、子节点,子孙节点
    print(soup.body.children)#body所以子节点返回迭代器对象 <list_iterator object at 0x02C72650>
    print(list(soup.body.children))#强转换为list对象
    
    print(soup.body.descendants)#子孙节点 生成器具对象
    print(list(soup.body.descendants))#子孙节点
    
    #7、父节点、祖先节点
    print(soup.p.parent)#找p标签的父节点 为body
    print(soup.p.parents)#获取p标签的祖先节点
    print(list(soup.p.parents))#获取p标签的祖先节点
    
    #8、兄弟节点
    #找到下一个兄弟
    print(soup.p.next_sibling)
    #找下面所有的兄弟
    print(soup.p.next_siblings) #返回生成器
    print(list(soup.p.next_siblings))
    
    #找上一个兄弟
    print(soup.a.previous_sibling)#找a上一个兄弟节点
    print(soup.a.previous_siblings)#返回生成器
    print(list(soup.a.previous_siblings))

    bs4搜索文档库的应用

    html_doc = """
    <html><head><title>The Dormouse's story</title></head>
    <body>
    <p class="sister"><b>$37</b></p>
    
    <p class="story" id="p">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" >Elsie</a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.</p>
    
    <p class="story">...</p>
    """
    
    
    from bs4 import BeautifulSoup
    soup=BeautifulSoup(html_doc,'lxml')
    
    #字符串过滤器
    #name
    p_tag=soup.find(name='p')
    print(p_tag)#根据文本p查找某个标签
    tag_s1 = soup.find_all(name='p')#查找所有标签名为p的节点
    
    #attrs
    #查找第一个class为sister的节点
    p=soup.find(attrs={'class':'sister'})
    print(p)
    #查找所有class为sister的节点
    p=soup.find_all(attrs={'class':'sister'})
    print(p)
    
    #text
    text=soup.find(text='$37')
    print(text)
    
    #配合使用
    #找到一个id为link2的以及文本为Lacie的a标签
    a=soup.find(name='a',attrs={"id":"link2"},text='Lacie')
    print(a)

    用python爬取豌豆荚数据

    '''
    
    下载地址:
        https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page=3&ctoken=lAd3GvU1DbFpJzYVdADWw9pS
    
        https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page=4&ctoken=lAd3GvU1DbFpJzYVdADWw9pS
    '''
    from bs4 import BeautifulSoup
    import re
    import requests
    def get_page(url):
        response=requests.get(url)
        return response
    
    
        #app名称
    
    
    #2、开始解析
    
    #解析详情页
    def parse_detail(text):
        soup=BeautifulSoup(text,'lxml')
    
        #app名称
        name=soup.find(name='span',attrs={"class":"title"}).text
        print(name)
    
        #好评率
        love=soup.find(name='span',attrs={"class":"love"}).text
        print(love)
    
        #评论数
        commit_num=soup.find(name='a',attrs={"class":"comment-open"}).text
        print(commit_num)
    
        #小编点评
        commit_content = soup.find(name='div', attrs={"class": "con"}).text
        print(commit_content)
    
        #app下载链接
        download_url = soup.find(name='a', attrs={"class": "normal-dl-btn"}).attrs['href']
        print(download_url)
    
    
    
    
    #解析主页
    def parse_index(data):
        soup = BeautifulSoup(data, 'lxml')
        '''
        图标地址
        <li data-pn="com.casual.game.jump" class="card" data-suffix=""><div class="icon-wrap"><a href="https://www.wandoujia.com/apps/com.casual.game.jump">  <img src="https://android-artworks.25pp.com/fs08/2018/07/11/9/109_2154e564e7823981ae2cde0102547db1_con_130x130.png" data-original="https://android-artworks.25pp.com/fs08/2018/07/11/9/109_2154e564e7823981ae2cde0102547db1_con_130x130.png" alt="Jump Jump Go" class="icon lazy" width="68" height="68" style="">  </a></div><div class="app-desc"><h2 class="app-title-h2"><a href="https://www.wandoujia.com/apps/com.casual.game.jump" title="Jump Jump Go" class="name">Jump Jump Go</a></h2><div class="meta">   <a rel="nofollow" class="tag gooddev" href="https://www.wandoujia.com/manual_testing?from=www" target="_blank" title="编辑亲测基本可用,无明显恶意行为。"></a>     <span class="install-count">6540人安装</span>  <span class="dot">・</span> <span title="5.22MB">5.22MB</span></div><div class="comment">  Jump Jump (跳一跳) was the most popular puzzle game i  </div></div>   <a class="tag-link" href="https://www.wandoujia.com/category/6001?pos=w/cardtag/gamecategory_com.casual.game.jump">休闲益智</a>     <a data-app-id="7837882" data-app-vid="300445168" data-app-name="Jump Jump Go" data-app-pname="com.casual.game.jump" data-app-vcode="8" data-app-vname="1.08" data-app-categoryid="6001" data-app-subcategoryid="" data-app-icon="https://android-artworks.25pp.com/fs08/2018/07/11/9/109_2154e564e7823981ae2cde0102547db1_con_130x130.png" data-app-rtype="1" data-app-requireid="1" class="detail-check-btn" href="https://www.wandoujia.com/apps/com.casual.game.jump">查看 </a>   </li>
        '''
        app_list=soup.find_all(name='li',attrs={"class":"card"})
        for app in app_list:
            #print("tank"*1000)
            print(app)
            #图标地址
            #获取第一个标签中的data-original属性
            img=app.find(name='img').attrs['data-original']
            print(img)
    
            #下载次数
            #获取class为install-count的span标签中的文本
            down_num=app.find(name='span',attrs={"class":"install-count"}).text
            print(down_num)
    
            #大小
            #根据文本正则获取到文本中包含  数字加MB(d代表数字)的span标签中的文本
            size=soup.find(name='span',text=re.compile("d+MB")).text
            print(size)
    
            #详情页地址
            #直接获取第一个a标签并提取href值
            detail_url=app.find(name='a').attrs['href']
            print(detail_url)
    
            # 3往app详情页发送请求
            response = get_page(detail_url)
    
            #4解析app详情页
            parse_detail(response.text)
    
    
    def main():
        for line in range(1,33):
            #1、往app接口发送请求
            url=f'https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page={line}&ctoken=lAd3GvU1DbFpJzYVdADWw9pS'
            response=get_page(url)
            #print(response.text)
            print("*"*1000)
            #反序列化为字典
            data=response.json()#json必须是双引号
            #获取App接口书局
            app_li=data['data']['content']
            print(app_li)
    
            #解析app标签数据
            parse_index(app_li)
    
    
    
    if __name__ == '__main__':

    pymongo的简单使用

    from pymongo import MongoClient
    
    #1连接mongoDB客户端
    #参数1:mongoDB的ip地址
    #参数2:mongoDB的端口号 默认:27017
    client=MongoClient('localhost',27017)
    print(client)
    
    #2、进入zmm_db库,没有则创建
    print(client['zmm_db'])
    
    #3、创建集合
    client['zmm_db']['people']
    
    #4、给zmm_db库插入数据
    #1、插入一条
    data1={
        'name':'zmm',
        'age':'20',
        'sex':'female'
    }
    client['zmm_db']['people'].insert(data1)
    
    #2、插入多条
    data1={
        'name':'zmm',
        'age':'20',
        'sex':'female'
    }
    data2={
        'name':'lyj',
        'age':'30',
        'sex':'female'
    }
    data3={
        'name':'zcj',
        'age':'21',
        'sex':'female'
    }
    client['zmm_db']['people'].insert([data1,data2,data3])
    
    #5、查数据
    data_s=client['zmm_db']['people'].find()
    for data in data_s:
        print(data)
    
    #差看一条数据
    print(client['zmm_db']['people'].find_one())
    
    #官方推荐使用
    #插入一条inser_one
    client['zmm_db']['people'].insert_one()
    #插入多条inser_many
    client['zmm_db']['people'].insert_many()

    有关命令的作用

    1、BeautifulSoup解析库
    2、MongoDB存储库
    3、requests-html 请求库
    
    BeautifulSoup
    1、什么是bs4?
        是一个基于re开发的解析库,可以提供一些强大的及解析功能.
        提高提取数据的效率与爬虫开发效率
    
    2、安装与使用
        pip install beaytifulsoup4
    
    
    MongoDB
    
    1、下载安装
    2、在C盘创建一个data/db文件夹
        -数据的存放路径
    3、输入mongod启动服务
        进入终端cmd(以管理员身份),输入mongod启动MongoDB服务
    
    4、mongo进入MongoDB客户端
        打开一个新的终端cmd(以管理员身份),输入mongo进入客户端
    二
    数据库操作:
    切换库:
    SQL:
        use admin;有则切换,无则报错
    MongoDB
    
        use zmm;有则切换,无则创建,并切换到zmm库中
    
    
    查数据库
    SQL:
        show databases;
    MongoDB:
        show dbs;显示的数据库若无数据则不显示
    
    删除库:
    SQL:
        drop database;
    MongoDB:
        db.dropDatabase()
    
    集合操作:MySQL中叫做表
    SQL:
        create table f1,f2.....
    MongoDB:
        #在当前库中通过点来创建集合
        db.student
    
    插入数据:
        #插入多条数据
        db.student.insert([{"name1":"tank1"},{"name2":"tank2"}])
        #插入一条name为zmm的数据
         db.student.insert({"name":"zmm"})
        #结果为WriteResult({ "nInserted" : 1 })
    
    
    
    
    查数据:
        #查找student集合中所有数据
        db.student.find({})
        #结果{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }
    
        #查看结果
          db.student.find({})
        #结果如下
        #{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }
        #{ "_id" : ObjectId("5d0b393914466bde5bc647c6"), "name1" : "tank1" }
        #{ "_id" : ObjectId("5d0b3a0214466bde5bc647c7"), "name1" : "tank1" }
        #{ "_id" : ObjectId("5d0b3a0214466bde5bc647c8"), "name2" : "tank2" }
    
    
        #查一条  查找name为zmm的记录
        #结果{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }

    通过本次学习,学习到python的更多知识,特别开心

  • 相关阅读:
    NYoj 素数环(深搜入门)
    深搜和广搜
    hdu 3449 (有依赖的01背包)
    hdu 1712 (分组背包入门)
    sql数据库常用语句总结
    常用工具和API的网站收集
    23种设计模式
    sql 联合查询并更新
    sql 去除重复记录
    读<你必须知道的.NET>IL指令笔记
  • 原文地址:https://www.cnblogs.com/zmmm/p/11067379.html
Copyright © 2020-2023  润新知