学习Python爬虫

# -*- coding: utf-8 -*-

www.icourse163.org/learn/BIT-1001870001

"""

Created on Thu Dec 21 19:38:18 2017

@author: ququxi

"""

本文是我看MOOC公开课上课,跟随老师记下的CODE代码!我希望我学习Python 这件事情能够坚持下来,不要去做一些没有意义的事情!总是在学习是好事,虽然我快要毕业了……我希望我自己今后的人生,一直都在学校里……并不是说我把自己装在学校里,我希望我自己一直在学习!这只是一片前言。


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("排名","学校名称","总分",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库主要功能函数


**re.search(pattern,string,flags = 0)

在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象

pattern:正则表达式的字符串或原生字符串表示

string:带匹配的字符串

flags:正则表达式的控制标记

re.I(re.IGNORECASE) 表示忽略正则表达式的大小写

re.M(re.MULTILINE)表示正则表达式中的^操作符能够将给定的字符串的每行当做匹配开始

re.S(re.DOTALL) 表示正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

**re.match(pattern,string,flags = 0)

**re.findall(pattern,string,flags = 0)

搜索字符串,以列表类型返回全部能匹配的子串

** re.split(pattern,string,maxsplit = 0,flags = 0)

maxsplit 最大分割数,剩余部分作为最后一个元素输出

** re.finditer(pattern,string,flags = 0)

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

** re.sub(pattern,repl,string,count = 0,flags = 0)

在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

repl 替换 匹配字符串的字符串

count 匹配的最大替换次数

'''

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')

'''上述是函数式用法:一次性操作

Re库的另一种等价用法,是面向对象用法:编译后的多次操作

'''

pat = re.compile(r'[1-9]\d{5}')

rst = pat.search('BIT 100081')

'''

regx = re.compile(pattern,flags = 0)

将正则表达式的字符串形式编译为正则表达式对象

pattern 正则表达式的字符串或原生字符串表示

flags:正则表达式的控制标记

regx.search()

regx.match()

regx.findall()

regx.split()

regx.finditer()

regx.sub()



'''

rst.string  #待匹配的文本

rst.re      #匹配时使用的pattern对象(正则表达式)

rst.pos      #正则表达式搜索文本的开始位置

rst.endpos  #正则表达式搜索文本的结束位置

rst.group(0)  #获得匹配后的字符串

rst.start()  #匹配字符串在原始字符串的开始位置

rst.end()    #匹配字符串在原始字符串的结束位置

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)



# 最小匹配操作符

'''

*? 前一个字符0次或无限次扩展,最小匹配

+? 前一个字符1次或无限次扩展,最小匹配

?? 前一个字符0次或1次扩展,最小匹配

{m,n}? 扩展前一个字符m至n次,最小匹配

'''

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 3,956评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,517评论 18 139
  • 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例...
    Python程序媛阅读 1,334评论 0 22
  • re模块 开始使用re Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串...
    Alex陌阅读 1,274评论 0 0
  • “我去炸学校,老师不知道,一拉线我就跑,轰的一声学校不见鸟。”咱们可耐的苏云染同鞋,哼着改编的小曲,开心的上学去了...
    上官云曦阅读 227评论 0 0