Python入门学习记录03–用户管理系统+Xpath
1.完成用户管理系统
print ( """
************************************
|欢迎使用【学生信息管理系统】|
|请选择你想要进行的操作 |
|1.新建学生信息 |
|2.显示全部信息 |
|3. 查询学生信息 |
|4. 删除学生信息 |
|5.修改学生信息 |
|0.退出系统 |
************************************
""" )
str_print = "姓名:{}\t语文成绩:{}\t数学成绩:{}\t英语成绩{}\t总成绩:{}"
grade_list = [ ]
while 1 :
action = input ( "请选择你想要进行的操作:" )
if action == '1' :
Name = input ( '请输入名字:' )
Chinese = int ( input ( '请输入语文成绩:' ) )
Math = int ( input ( '请输入数学成绩:' ) )
English = int ( input ( '请输入英语成绩:' ) )
Total = Math+ Chinese+ English
grade_list. append( [ Name, Chinese, Math, English, Total] )
print ( grade_list)
print ( str_print. format ( Name, Chinese, Math, English, Total) )
pass
elif action == '2' :
print ( '以下是全部信息:' )
for item in grade_list:
print ( str_print. format ( * item) )
pass
elif action == '3' :
Name = input ( '请输入你需要查询学生的姓名:' )
for item in grade_list:
if Name in item:
print ( str_print. format ( * item) )
break
else :
print ( '此学生不存在' )
pass
elif action == '4' :
Name = input ( '请输入要删除的学生姓名:' )
for item in grade_list:
if Name in item:
item = grade_list. pop( grade_list. index( item) )
print ( '这个学员的信息已经被删除' )
pass
elif action == '5' :
Name = input ( '请输入要修改的学生姓名:' )
for item in grade_list:
if Name in item:
index = grade_list. index( item)
break
print ( '学员的信息修改成功' )
else :
print ( '此学生不存在' )
continue
Chinese = int ( input ( '请输入语文成绩:' ) )
Math = int ( input ( '请输入数学成绩:' ) )
English = int ( input ( '请输入英语成绩:' ) )
Total = Chinese+ Math+ English
grade_list[ index] = [ Name, Math, Chinese, English, Total]
pass
elif action == '0' :
break
else :
print ( '信息输入有误,重新输入' )
pass
2.使用urllib爬取三个不同的网页并且保存到本地
import urllib. request
def getHTML ( url) :
html = urllib. request. urlopen( url) . read( )
return html
def saveHTML ( file_name, file_content) :
with open ( file_name. replace( '/' , '_' ) + ".html" , "wb" ) as f:
f. write( file_content)
aurl1 = "https://mil.news.sina.com.cn/zhengming/2020-09-02/doc-iivhuipp2027816.shtml"
aurl2 = "https://music.163.com/?from=infinity"
aurl3 = "https://www.icourse163.org/"
html1 = getHTML( aurl1)
print ( "网页1已爬取" )
html2 = getHTML( aurl2)
print ( "网页2已爬取" )
html3 = getHTML( aurl3)
print ( "网页3已爬取" )
saveHTML( "Xin_Lang" , html1)
print ( "网页1已存储至本地" )
saveHTML( "Wang_Yi_Yun" , html2)
print ( "网页2已存储至本地" )
saveHTML( "Mooc" , html3)
print ( "网页3已存储至本地" )
3.熟悉Xpath语法,并且自己去找几个网页利用Xpath语法获取网页元素,并且将获取到的截图和Xpath语法保存提交
(1)Xpath语法自学笔记
'''
(1)nodename选中该元素。
/ 从根节点选取、或者是元素和元素间的过渡。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。跨节点获取标签
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
text() 选取文本。
(2)通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。
/div/ 选取div元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的title元素。
'''
import parsel
'''网页片段'''
html_str = """
<div>
<ul>
<li class="item-1">
<a href="link1.htm1 ">第一个</a>
</1i>
<li class="item-2">
<a href="link2.html ">第二个</a>
</1i>
<li class="item-3">
<a href="link3.html ">第三个</a>
</1i>
<li class="item-4">
<a href="link4.html ">第四个</a>
</1i>
<li class="item-5">
<a href="link5.htm1 ">第五个</a>
</1i>
<li class="item-6">
<a href="link6.html ">第六个</a>
</1i>
<li class="item-7">
<a href="link7.html ">第七个</a>
</1i>
<li class="item-8">
<a href="link8.html ">第八个</a>
</1i>
<li class="item-9">
<a href="link9.htm1 ">第九个</a>
</1i>
<li class="item-10">
<a href="link10.html ">第十个</a>
</1i>
</ul>
</div>
"""
'''1.转换数据类型'''
data = parsel. Selector( html_str)
print ( data)
'''2.1从根节点开始,获取所有<a>标签'''
result1 = data. xpath( '/html/body/div/ul/li/a' ) . extract( )
'''2.2跨节点获取所有<a>标签'''
result2 = data. xpath( '//a' ) . extract( )
'''2.3选取当前节点使用场景:需要对选取的标签的下一级标签进行多次提取'''
result3 = data. xpath( '//ul' )
result4 = result3. xpath( './li/a' ) . extract( )
'''2.4选取当前节点的父节点,获取父节点的class属性值'''
result5 = data. xpath( '//a' )
result6 = result5. xpath( '../@class' ) . extract( )
'''2.5获取第三个<1i>标签的节点(两种方法)'''
result7 = data. xpath( '//li[3]' ) . extract( )
result8 = data. xpath( '//li' ) [ 2 ] . extract( )
'''2.6通过定位属性的方法获取第四个<a>标签'''
result9 = data. xpath( '//a[@href="link4.html "]' ) . extract( )
'''2.7用属性定位标签,获取第四个<a>标签包裹的文本内容'''
result10 = data. xpath( '//a[@href="link4.html "]/text()' ) . extract( )
'''2.8获取第五个<a>标签的href属性值'''
result11 = data. xpath( '//li[5]/a/@href' ) . extract( )
'''模糊查询'''
result12= data. xpath( '//li[contains(@class,"it")]' ) . extract( )
print ( result12)
(2)Xpath查找实战(此处借鉴别的博客)
'''
提取:排名':大学名称,区域,总分,研究生比例,留学生比例, 师生比, 博士学位授权总量,博士学位授权师均
校友获奖总量,校友获奖生均
'''
import requests
import re
import csv
import json
from lxml import etree
url = 'http://www.zuihaodaxue.com/Greater_China_Ranking2019_0.html'
ua = { 'User-Agent' : 'User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1' }
resp = requests. get( url, headers = ua)
print ( resp. status_code)
print ( resp. content. decode( 'utf-8' ) )
html = resp. content. decode( 'utf-8' )
e_html = etree. HTML( html)
title = e_html. xpath( '//title/text()' )
university_index = e_html. xpath( '//div[@class="news-text"]//tbody/tr/td[1]/text()' )
university_name = e_html. xpath( '//div[@class="news-text"]//tbody/tr/td[2]/a/div/text()' )
university_location = e_html. xpath( '//div[@class="news-text"]//tbody/tr/td[3]/text()' )
university_score = e_html. xpath( '//div[@class="news-text"]//tbody/tr/td[4]/text()' )
university_score_other = e_html. xpath( '//div[@class="news-text"]//tbody/tr/td[@class="hidden-xs"]/text()' )
list_university= [ ]
for i in range ( 100 ) :
d1 = {
'排名' : university_index[ i] ,
'大学名称' : university_name[ i] ,
'区域' : university_location[ i] ,
'总分' : university_score[ i] ,
'其他评分' : university_score_other[ i* 7 : i* 7 + 7 ]
}
list_university. append( d1)
with open ( r'C:\Users\Administrator\Desktop\university.txt' , 'a' , encoding= 'utf-8' ) as df:
for one in list_university:
df. write( json. dumps( one, ensure_ascii= False ) + '\n\n' )
dict_university_new= [ ]
for i in list_university:
temp= {
'排名' : i[ '排名' ] ,
'大学名称' : i[ '大学名称' ] ,
'区域' : i[ '区域' ] ,
'总分' : i[ '总分' ] ,
'研究生比例' : i[ '其他评分' ] [ 0 ] ,
'留学生比例' : i[ '其他评分' ] [ 1 ] ,
'师生比' : i[ '其他评分' ] [ 2 ] ,
'博士学位授权总量' : i[ '其他评分' ] [ 3 ] ,
'博士学位授权师均' : i[ '其他评分' ] [ 4 ] ,
'校友获奖总量' : i[ '其他评分' ] [ 5 ] ,
'校友获奖生均' : i[ '其他评分' ] [ 6 ]
}
dict_university_new. append( temp)
with open ( r'C:\Users\Administrator\Desktop\university.csv' , 'a' , encoding= 'gbk' , newline= '' ) as cf:
writer = csv. DictWriter( cf, fieldnames = [ '排名' , '大学名称' , '区域' , '总分' , '研究生比例' , '留学生比例' , '师生比' , '博士学位授权总量' , '博士学位授权师均' , '校友获奖总量' , '校友获奖生均' ] )
writer. writeheader( )
writer. writerows( dict_university_new)