美文网首页
python学习第八章

python学习第八章

作者: 赵一矛 | 来源:发表于2018-12-10 23:48 被阅读0次

    pyinstaller库的使用

    pyinstaller是一个将Python语言脚本(.py)打包成可执行文件的第三方库,可用于windows,Linux,Max OS X等操作系统。
    使用pip工具安装
    pip install pyinstaller
    打包:
    pyinstaller F:\python\codes\da.py

    beautifulsoup4库的使用

    beautifulsoup4库是一个解析和处理HTML和XML的第三方库。
    它最大的优点是根据HTML和XML语法建立解析树,进而高效解析其中的内容。
    HTML建立的web页面是一个非常复杂,除了有用的信息外,还包括大量用于页面格式的元素,直接解析一个Web页面需要深入了解HTML语法,而且比较复杂。beautifulsoup4库将专业的Web页面格式解析部分封装成函数,提供了若干有用且便捷的处理函数。
    引用beautifulsoup4库
    from bs4 import BeautifulSoup

    beautifulsoup4库解析

    beautifulsoup4库中最主要的是Beautifulsoup4类,每个实例化的对象相当于一个页面。采用from-import导入库中的Beautifulsoup类后,使用Beautifulsoup()创建一个BeautifulSoup对象。


    • BeautifulSoup对象的常用属性(共6个)



    • 标签对象的常用属性(共4个)



      由于HTML语法可以在标签中嵌套其他标签,所以,string属性的返回值遵循如下原则

    • 如果标签内没有其他标签,string属性返回其中的内容。
    • 如果标签内部还有其他的标签,但只有一个标签,string属性返回最里面的标签的内容。
    • 如果标签内部有超过一层嵌套的标签,string属性返回None(空字符串)
      当需要列出标签对于的所有内容或找到非第一个标签时,需要用到BeautifulSoup的find()和find_all()方法,这两个方法会遍历整个HTML文档,按照条件返回标签内容。
      BeautifulSoup.find_all(name,attrs,recursive,string,limit)
      根据参数找到对应的标签,返回列表类型。

    中国大学排名爬虫

    网页链接地址
    软科中国最好大学排名2016
    大学排名爬虫需要3个步骤

    1. 从网络上获取网页内容
    2. 分析网页内容并提取有用数据到恰当的数据结构中
    3. 利用数据结构展示或进一步处理数据
      网页源代码:




      代码中每个td标签包含大学排名表格的一个列数值,与表头一一对应。因此。如果要获得其中的数据,需要首先找到<tr></tr>标签,并遍历其中每个<td></td>标签,获取其值写入程序的数据结构中。

    import requests
    from bs4 import BeautifulSoup
    allUniv=[]
    def getHTMLText(url):
        try:
            r=requests.get(url,timeout=30)#用get方法打开连接,设定每次请求超时时间为30秒
            r.raise_for_status()  #如果状态不是200,引发异常
            r.encoding='utf-8' #设定编码为utf-8
            return r.text
    
        except:
            return ""
    
    def fillUnivList(soup):
        data=soup.find_all("tr")#获取所有的tr
        for tr in data:
            ltd=tr.find_all("td")#获取tr中的所有的td
            if len(ltd)==0:
                continue
            singleuniv=[]
            for td in ltd:
                singleuniv.append(td.string) #提取td标签中的内容
            allUniv.append(singleuniv)
    def printUnivList(num):
        print("{:^4}{:^10}{:^5}{:^8}{:^10}".format("排名","学校名称","省市","总分","培养规模"))
        for i in range(num):
            u=allUniv[i]
            print("{:^4}{:^10}{:^5}{:^8}{:^10}".format(u[0],u[1],u[2],u[3],u[6]))
    def main(num):
        url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
        html=getHTMLText(url)
        soup=BeautifulSoup(html,"html.parser")
        fillUnivList(soup)
        printUnivList(num)
    
    main(10)
    

    结果



    格式太乱,解决方法:
    替换填充字符,采用“中文全角空格”代替默认使用的“西文半角空格”,这能够对齐中文字符出现的列。

    def printUnivList(num):
        print("{1:^2}{2:{0}^10}{3:{0}^6}{4:{0}^4}{5:{0}^10}".format(chr(12288),"排名","学校名称","省市","总分","培养规模"))
        for i in range(num):
            u=allUniv[i]
            print("{1:^4}{2:{0}^10}{3:{0}^5}{4:{0}^8}{5:{0}^10}".format(chr(12288),u[0],u[1],u[2],u[3],u[6]))
    

    搜索关键字自动提交

    import requests
    from bs4 import BeautifulSoup
    import re
    import json
    def getKeywordResult(keyword):
        url="http://www.baidu.com/s?wd="+keyword
        try:
            r=requests.get(url,timeout=30)
            r.raise_for_status()
            r.encoding='utf-8'
            return r.text
        except:
            return ""
    
    def parsetLinks(html):
        soup=BeautifulSoup(html,"html.parser")
        links=[]
        for div in soup.find_all('div',{'data-tools':re.compile('title')}):
            data=div.attrs['data-tools']
            d=json.loads(data)
            links.append(d['title'])
        return links
    def main():
        html=getKeywordResult("Python语言程序设计语言")
        ls=parsetLinks(html)
        count=1
        for i in ls:
            print("[{:^3}]{}".format(count,i))
            count+=1
    main()
    

    结果


    相关文章

      网友评论

          本文标题:python学习第八章

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