# -*- coding: utf-8 -*-
www.icourse163.org/learn/BIT-1001870001
"""
Created on Thu Dec 21 19:38:18 2017
@author: ququxi
"""
本文是我看MOOC公開(kāi)課上課丹诀,跟隨老師記下的CODE代碼砌溺!我希望我學(xué)習(xí)Python?這件事情能夠堅(jiān)持下來(lái),不要去做一些沒(méi)有意義的事情!總是在學(xué)習(xí)是好事提佣,雖然我快要畢業(yè)了……我希望我自己今后的人生,一直都在學(xué)校里……并不是說(shuō)我把自己裝在學(xué)校里荤崇,我希望我自己一直在學(xué)習(xí)拌屏!這只是一片前言。
import requests
import bs4
from bs4 import BeautifulSoup
def getHTMLText(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encode? = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist,html):
soup = BeautifulSoup(html,'html.parser')
for tr in soup.find('tbody').children:
if isinstance(tr,bs4.element.Tag):
tds = tr('td')
ulist.append([tds[0].string,tds[1].string,tds[3].string])
def printUnivList(ulist,num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
print(tplt.format("排名","學(xué)校名稱(chēng)","總分",chr(12288)))
for i in range(num):
u = ulist[i]
print(tplt.format(u[0],u[1],u[2],chr(12288)))
print('Suc' + str(num))
def main():
uinfo = []
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html'
html = getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo, 20) # 20 univs
main()
'''
Re庫(kù)主要功能函數(shù)
**re.search(pattern,string,flags = 0)
在一個(gè)字符串中搜索匹配正則表達(dá)式的第一個(gè)位置术荤,返回match對(duì)象
pattern:正則表達(dá)式的字符串或原生字符串表示
string:帶匹配的字符串
flags:正則表達(dá)式的控制標(biāo)記
re.I(re.IGNORECASE) 表示忽略正則表達(dá)式的大小寫(xiě)
re.M(re.MULTILINE)表示正則表達(dá)式中的^操作符能夠?qū)⒔o定的字符串的每行當(dāng)做匹配開(kāi)始
re.S(re.DOTALL) 表示正則表達(dá)式中的.操作符能夠匹配所有字符倚喂,默認(rèn)匹配除換行外的所有字符
**re.match(pattern,string,flags = 0)
**re.findall(pattern,string,flags = 0)
搜索字符串,以列表類(lèi)型返回全部能匹配的子串
** re.split(pattern,string,maxsplit = 0,flags = 0)
maxsplit 最大分割數(shù)瓣戚,剩余部分作為最后一個(gè)元素輸出
** re.finditer(pattern,string,flags = 0)
搜索字符串端圈,返回一個(gè)匹配結(jié)果的迭代類(lèi)型,每個(gè)迭代元素是match對(duì)象
** re.sub(pattern,repl,string,count = 0,flags = 0)
在一個(gè)字符串中替換所有匹配正則表達(dá)式的子串子库,返回替換后的字符串
repl 替換 匹配字符串的字符串
count 匹配的最大替換次數(shù)
'''
import re
match = re.search(r'[1-9]\d{5}','BIT 100081')
if match:
print(match.group(0))
match = re.match(r'[1-9]\d{5}','100081 BIT')
if match:
match.group(0)
ls = re.findall(r'[1-9]\d{5}','BIT100081 BIT100082')
print(ls)
re.split(r'[1-9]\d{5}','BIT100081 BIT100082')
re.split(r'[1-9]\d{5}','BIT100081 BIT100082',maxsplit = 1)
for m in re.finditer(r'[1-9]\d{5}','BIT100081 BIT100082'):
if m:
print(m.group(0))
re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 BIT100082')
'''上述是函數(shù)式用法:一次性操作
Re庫(kù)的另一種等價(jià)用法舱权,是面向?qū)ο笥梅ǎ壕幾g后的多次操作
'''
pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('BIT 100081')
'''
regx = re.compile(pattern,flags = 0)
將正則表達(dá)式的字符串形式編譯為正則表達(dá)式對(duì)象
pattern 正則表達(dá)式的字符串或原生字符串表示
flags:正則表達(dá)式的控制標(biāo)記
regx.search()
regx.match()
regx.findall()
regx.split()
regx.finditer()
regx.sub()
'''
rst.string? #待匹配的文本
rst.re? ? ? #匹配時(shí)使用的pattern對(duì)象(正則表達(dá)式)
rst.pos? ? ? #正則表達(dá)式搜索文本的開(kāi)始位置
rst.endpos? #正則表達(dá)式搜索文本的結(jié)束位置
rst.group(0)? #獲得匹配后的字符串
rst.start()? #匹配字符串在原始字符串的開(kāi)始位置
rst.end()? ? #匹配字符串在原始字符串的結(jié)束位置
rst.span()? #返回(.start(),.end())
import re
regex = re.compile(r'[1-9]\d{5}')
m = regex.search('BIT100081 TSU100084')
m.string
m.re
m.pos
m.endpos
m.group(0)
m.group(1) #?
m.start()
m.span()
match = re.search(r'PY.*N','PYANBNCNDN')
match.group(0)
match = re.search(r'PY.*?N','PYANBNCNDN')
match.group(0)
# 最小匹配操作符
'''
*? 前一個(gè)字符0次或無(wú)限次擴(kuò)展刚照,最小匹配
+? 前一個(gè)字符1次或無(wú)限次擴(kuò)展刑巧,最小匹配
?? 前一個(gè)字符0次或1次擴(kuò)展,最小匹配
{m,n}? 擴(kuò)展前一個(gè)字符m至n次无畔,最小匹配
'''