小学课后服务 Python少儿编程 进阶篇:4-爬取高校排名 课件_第1页
小学课后服务 Python少儿编程 进阶篇:4-爬取高校排名 课件_第2页
小学课后服务 Python少儿编程 进阶篇:4-爬取高校排名 课件_第3页
小学课后服务 Python少儿编程 进阶篇:4-爬取高校排名 课件_第4页
小学课后服务 Python少儿编程 进阶篇:4-爬取高校排名 课件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Loremipsumdolorsitamet,consectetueradipiscingelit.Aeneancommodoligulaegetdolor.Cumsociisnatoquepenatibusetmagnisdisparturientmontes,nasceturridiculusmus.少儿编程课爬取高校排名本节课我们来编写一个爬虫案例,将高校信息爬取下来,并存入Excel表课程案例现在我们开始编写代码,首先使用Requests库获得页面信息1导入requests库,将要爬取的网站赋值给变量2编写获取整个网页数据的函数importrequests

#要爬取的目标网站

start_url='https://tool.lu/school/index.html'defget_text(url):

response=requests.get(url)

returnresponse.text获得网页信息数据后,查看网页源代码,确定我们所需数据的位置1在网页中单击右键,然后点击查看网页源代码2通过查看分析,发现需要的数据被两个相同的标签包裹在其中确定了所需信息的位置之后,我们使用字符串相关知识来获取目标信息1通过源代码中的标签将整个页面数据拆分2继续查看源代码,发现每个高校信息被<tr>标签分割#使用字符串截取知识点获取所有高校数据

defget_item_by_str(text):

item_list=[]

#将整页数据拆为列表

list_1=text.split('<tablewidth="100%"cellspacing="0"cellpadding="0"class="tbl">')#将list_1的后半部分通过<tr>在拆一次

list_2=list_1[1].split('<tr>')3通过索引获得包含高校数据的部分,并通过<tr>标签在拆分一次1输出list_2,观察得到的数据2以下是一部分数据去除脏数据#使用字符串截取知识点获取所有高校数据

defget_item_by_str(text):

……

print(list_2)content=get_text(start_url)

get_item_by_str(content)列表第一项为空数据,之后的每一项都包含了高校的信息,但是有很多我们不需要的脏数据1通过切片,去除list_2列表中的第一项2替换每一项中的脏数据,只保留<td>现在,我们去除列表中的脏数据3输出替换过后的数据4通过<td>标签再次将每一条数据进行拆分foriinlist_2:

#去除脏数据

fortagin['\n','','</td>','<spanstyle="color:#009A61;">','</span>','</tr>','<tr>',

'<thwidth="40%">','<thwidth="20%">','</th>','<spanstyle="color:#E74C3C;">',

'</table>','<p>注:<p>','<spanstyle="color:#009A61;">','<spanstyle="color:#E74C3C;">']:

i=i.replace(tag,'')list_2=list_1[1].split('<tr>')[1:]print(i)little_item=i.split('<td>')第一条数据是我们不需要的,我们暂时先不管它1输出little_item,结果如下:2通过切片去除空数据接着观察处理后的数据,对数据进行进一步处理3将处理之后的小列表添加到之前创建的空列表中4将完整的高校信息表作为返回值返回,同时去除第一条我们不需要的数据可以看到,第一个列表是我们不需要的数据,剩下的每一个高校信息列表中的第一项数据都为空数据little_item=i.split('<td>')[1:]#将每个小列表添加到item_list中

item_list.append(little_item)returnitem_list[1:]正则表达式正则表达式也能够索引数据以下是正则表达式中常用的一些规则:语法说明语法说明.匹配除换行符以外的所有字符*匹配前一个字符0次或多次\转义字符,例如想要匹配.,使用\.+匹配前一个字符1次或多次[…]字符集?匹配前一个字符0次或一次\d数字,也可写作[0-9]{m}匹配前一个字符m次\D非数字,[^\d]{m,n}匹配前一个字符m到n次\s空白字符^字符串以什么开头\S非空白字符[^\s]$字符串以什么结尾\w单词[A-Za-z0-9_]|左右表达式任意匹配一个\W非单词字符(…)被括起来的表达式作为一个整体1对于本测试用例,手机号的匹配规则:接下来我们使用一个例子来看一下正则表达式的使用2邮箱的匹配规则测试用例test_str='''

小王手机号码箱:12356484557@密码:qwer123

小李手机号码箱:dada_qqq@密码:QQppp121

小刘手机号码箱:abc666@163.com密码:1545454

小吴手机号码箱:545131ads@密码:123645

小郑手机号码箱:assdasdfa@密码:mingtian

小赵手机号码箱:1231eq143123@密码:nihao

小孙手机号码箱:1121112wqeq@密码:12qw12qw

小郑手机号码箱:dadad_dadad@密码:qeqerqtad

小张手机号码箱:1234@126.com密码:qQDA12wQEQ3

小冯手机号码箱:qwe@密码:WEQDAQ12121

''''(1[0-9]\d{9})'([0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}\.[a-zA-Z]+)1新建python文件,导入re库并,将测试用例复制进去接下来我们使用一个例子来看一下正则表达式的使用2将手机号码查找出来phone_rule=pile('(1[0-9]\d{9})')

result=phone_rule.findall(test_str)

print(result)3将邮箱查找出来mail_rule=pile('([0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}\.[a-zA-Z]+)')

result=phone_rule.findall(test_str)

print(result)直接使用字符串表示的正则表达式进行findall操作时,Python会将字符串转为正则表达式对象所以我们先使用compile完成一次转换,之后使用就不用重复转换了练习Exercises密封线内不准答题编写正则,使用re库将密码查找出来1导入Python正则库re2定义函数,首先去除整个网页数据中的换行和空格接下来,我们回到高校案例,使用Python中的正则库取出高校数据3通过正则提取数据,缩小范围4再次编写正则,将高校数据取出,并作为返回值返回importre#使用正则表达式获取所有高校数据

defget_item_by_re(text):

#去除空格

html=text.replace('\n','').replace('','')#缩小范围

rule_1=pile(r'双一流</th></tr><tr>(.*)</table><p>注')

table=rule_1.findall(html)#正则取出数据

rule_2=pile('td>(.*?)</td><td><spanstyle="color:#[A-Za-z0-9]+;">(.*?)</span></td><td>'

'<spanstyle="color:#[A-Za-z0-9]+;">(.*?)</span></td><td>(.*?)</td></tr>')

returnrule_2.findall(table[0])BeautifulSoup除了使用上面两种方式获取数据,还有更加方便的方式:借助BeautifulSoup库的帮忙BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库1首先来安装,打开CMD,使用pip安装2按下回车键,就能够自动下载安装安装完成之后,我们通过一个小案例来学习一下它的简单用法BeautifulSoup库的简单使用:<!DOCTYPEhtml>

<htmllang="en">

<head>

<metacharset="UTF-8">

<title>BeautifulSoup使用范例</title>

</head>

<body>

<h1>我是H1标签</h1>

<pclass='第一个P'>我是第一个p标签</p>

<p>我是第二个p标签</p>

<a>我是第一个a标签</a>

<aid='a2'>我是第一个a标签</a>

<a>我是第一个a标签</a>

<a>我是第一个a标签</a>

</body>

</html>一个简单的HTML范例如下:frombs4importBeautifulSoup

html='''...'''

bs=BeautifulSoup(html,'lxml')

#简单的获取数据的方法:

print('文档的title:',bs.title)

print('title的name属性:',)

print('title的内容:',bs.title.string)

print('title的parent名称,也就是上一级名称:',)

print('文档中第一个p节点:',bs.p)#获取

print('文档中第一个p节点的内容:',bs.p.get_text())#获取

print('第一个p节点的class内容:',bs.p['class'])#获取

print('文档的第一个a节点:',bs.a)#获取

print('文档中所有的a节点,返回一个list:',bs.find_all('a'))

print('文档中id属性为a2的节点:',bs.find(id='a2'))1使用BeautifulSoup获取数据212导入相关库接下来,我们就使用BeautifulSoup获取高校数据43#使用BeautifulSoup获取所有高校数据

defget_item_by_bs(text):

#创建BeautifulSoup实例

bs=BeautifulSoup(text,‘lxml')frombs4importBeautifulSoup#查找所有标签为tr的内容

tag_tr=bs.find_all('tr')#获取所有高校数据并转为数据表

return[[i.get_text().strip()foriintr.find_all('td')]fortrintag_tr][1:-5]返回高校数据表获得tr标签中的内容定义函数,创建BeautifulSoup实例将数据存入Excel表1先来安装,cmd中输入pipinstallxlwt2安装完成后,将其导入接下来,我们将得到的高校信息存入Excel表,Python操作Excel可以使用xlwt库4设置第二列和第五列的单元格长度3观察最终效果,第二列和第五列的单元格长度较长importxlwt#设置单元格宽度

defset_width(sheet):

#设置第二列宽度

col_2=sheet.col(1)

col_2.width=256*20

#设置第五列宽度

col_5=sheet.col(4)

col_5.width=256*15256*N,就表示有N个字符长度。1定义设置样式的函数,创建两个样式实例2设置表格边框为实线然后,设置表格样式4设置全部字体样式3使文字居中显示#设置Excel样式

defset_sheet_style():

#创建第一行样式和全部样式实例

all_style=xlwt.XFStyle()

first_row_style=xlwt.XFStyle()由于第一行的样式和剩余样式不同,所以这里我们创建两个样式实例#设置边框线

border=xlwt.Borders()

border.top=xlwt.Borders.THIN

border.bottom=xlwt.Borders.THIN

border.left=xlwt.Borders.THIN

border.right=xlwt.Borders.THIN#使文字居中

alignment=xlwt.Alignment()

alignment.horz=xlwt.Alignment.HORZ_CENTER#水平居中

alignment.vert=xlwt.Alignment.VERT_CENTER#垂直居中#设置字体为微软雅黑

all_font=xlwt.Font()

all_='微软雅黑'5设置第一行字体样式#第一行设置为微软雅黑并字体加粗,字体大小为11

first_row_font=xlwt.Font()

first_row_='微软雅黑'

first_row_font.bold=True

first_row_font.height=20*111将修改好的相应样式绑定到全部样式实例2将修改好的相应样式绑定到第一行样式实例然后,设置表格样式3将样式返回#将修改好的样式添加到全部样式实例中

all_style.font=all_font

all_style.alignment=alignment

all_style.borders=border#将修改好的样式添加到第一行样式实例中first_row_style.font=first_row_font

first_row_style.alignment=alignment

first_row_style.borders=border#将样式返回

returnall_style,first_row_style1定义函数,参数为表格内创建的单元,高校数据表和表格样式2从第二行开始,向表格中写入编号表格样式相关工作已经完成,下面我们编写写入数据的函数3向表格写入数据#将数据写入表格

defwrite_item_in_sheet(sheet,item_list,style):#获得行号列号

forrowinrange(len(item_list)):

#生成表格编号

sheet.write(row+1,0,row+1,style)向表格写入数据,使用sheet.write()方法四个参数依次为:将内容写到第几行、写到第几列、写如的内容、样式由于是从第二行开始,所以是row+1forcolinrange(len(item_list[row])):

#将高校信息数据写入到excel表格中

sheet.write(row+1,col+1,ite

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论