python学习第八章

2018-12-10  本文已影响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对象。


中国大学排名爬虫

网页链接地址
软科中国最好大学排名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()

结果


上一篇 下一篇

猜你喜欢

热点阅读