学习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次,最小匹配

'''

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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