'''
#字符串重载
#print('he said "today\'s weather is good." ')
#print (r"hello \n makabaka")
'''
'''
#条件判断
#a = input('a=')
#if a>3:
#print ('a>3')
#elif a==3:
#print ('a=3')
#elif a<3:
#print ('a<3')
'''
'''
# 列表、点名册
namelist=["jery","makabaka","joker"]
print("添加前的名单:")
for name in namelist:
#print(namelist[0])
print(name)
newstuden=raw_input("添加学生名:") #raw_input函数才能同时接收字符串和数字/input只能接收数字
namelist.append(newstuden) #append增加元素到表的末尾
print("添加后的名单:")
for name in namelist:
print(name)
'''
'''
# 循环输出第1-10天
for x in range(1,11):
print ('第{}天'.format(x))
'''
'''
#打印除2外1-5 break跳出循环、continue跳过循环中的本次流程
a=0
while a<10:
a+=1
if a == 2:
continue
elif a>5:
break
print(a)
'''
'''
#逢7跳过
for x in range(1,101):
if x%10==7 or x==7 or x//10==7 or x%7==0:
continue
else :
print('{}'.format(x))
'''
'''
#字符串拼接与截取
N="makabaka"
print (N[0:8])
print (N[0:7:2])
print (N[:5])
print (N[5:])
print ("hello "+N)
print (N * 3)
'''
'''
#八个老师随机分配到3个办公室
import random
office=[[],[],[]]
names=[1,2,3,4,5,6,7,8]
for name in names: #在names中顺序取name进循环
index=random.randint(0,2) #随机生成0-2的整数
office[index].append(name) #将name添加到office列表3个办公室的随机一个的末尾
i=1
for name in office:
print ("办公室%d的人是:%s" %(i,name))
print ("\n")
'''
'''
#顺序打印产品a,b,c,d,e,f
products = [["a"],["b"],["c"],["d"],["e"],["f"]]
for goods in products:
print (goods)
'''
'''
#元组操作
test1 = (2,"makabaka")
test2 = (1,"joker")
test = test1 + test2
print (test)
del test
print (test)
'''
'''
#字典操作
info = {"name": "makabaka"}
print (info.get("kala",":x") )
num = input("新增的编号:") #新增键值对
info["id"]=num
print (info)
del info["name"] #删除键值对
print (info)
#info.clear() #清空字典内容
#print (info)
info["id"] = 20
print(info.keys()) #查找键
print(info.values()) #查找值
print(info.items()) #查找键值对
print (info)
'''
'''
#使用枚举函数同时拿到列表下标和元素内容
list=["a","b","c","d","e"]
for i,x in enumerate(list) :
print (i+1,x)
'''
'''
#定义函数输出一条横线
def hengxian():
print ("-------------------")
def hengxian1():
a=input("输出几条横线:")
while a!=0:
print (hengxian())
a-=1
print hengxian1()
'''
'''
定义函数求三数之和-1
def sum(a,b,c):
return a+b+c
a=input("输入第一个数:")
b=input("输入第二个数:")
c=input("输入第上个数:")
print (sum(a,b,c))
'''
'''
定义函数求三数平均值
def avarage():
return (sum(a,b,c))/3.0
print avarage()
'''
'''
#f=open("test.txt","w") #打开文件,w(写模式),文件不存在就新建
#f.close() #关闭文件
'''
'''
#读文件,打印文件内容
f=open("test.txt","r") #读文件
content=f.readlines() #取文件内容 可以看界文件读取的结果是一个列表
print (content)
i=1
for temp in content: #添加编号并循环输出列表
print ("%d %s"%(i,temp))
i+=1
f.close()
'''
'''
#捕获异常,跳过异常
try:
print ("---------test-----------1")
f = open("123.txt","r")
print ("---------test-----------2") #只写以上三句,会因为123.txt不存在而报错
except IOError: #未找到文件属于IO异常(输入输出异常)
print ("---------test-----------3") #这一行未捕获异常后执行的代码
'''
'''
#try.........finally...和嵌套
import time
try:
f = open("test.txt","r")
try:
while True: #当test.txt文件存在时
content = f.readline()
if len(content) == 0: #当某行内容为空时
break
time.sleep(2)
print (content)
finally:
f.close() #最终保证文件关闭
print ("文件关闭")
except Exception as result: #如果代码出现异常则输出出现异常
print ("发生异常。。。")
'''
'''
```python
#师从b站老师学的简单爬虫
#coding=utf-8
#!/user/bin/python
#1.请求网站 2.锁定数据 3.爬取(解析)数据 4.保存数据
import re
from bs4 import BeautifulSoup
import urllib.request
import urllib.response
import urllib
import xlwt
def main():
baseurl = "https://movie.douban.com/top250?start"
# 1.爬取网页
datalist = getData(baseurl)
# 3.保存数据
savepath="电影top250.xls"
saveData(datalist,savepath)
askURL("https://movie.douban.com/top250?start=0")
#影片详情链接的规则
findLink = re.compile(r'<a href="(.*?)">') #创建正则表达式对象,表示规则(字符串的模式)
#影片图片
findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S) #re.S让换行符包含在字符中
#影片片名
findTitle = re.compile(r'<span class="title">(.*)</span>')
#影片评分
findRating = re.compile(r'<span class="rating_num"> property="v:average"(.*)</span>',re.S)
#评价人数
findJudge = re.compile(r'<span>(\d*)人评价</span>',re.S)
#概况
findInq = re.compile(r'<span class="inq">(.*)<p>',re.S)
#找到影片相关内容
findBd = re.compile(r'<p class="">(.*)</p>',re.S)
#爬取网页
def getData(baseurl):
datalist=[]
for i in range(0,10): #调用获取页面信息的函数10次
url = baseurl + str(i*25)
html=askURL(url)
# 2.逐一解析数据
soup = BeautifulSoup(html,"html.parser") #声明使用BS库,使用其中的hrml.parser这一解析器来解析html这一数据
for item in soup.find_all('div',class_="item"): #查找符合要求的字符串,形成列表,class是个属性要加下划线
#print(item) #查看电影的全部item信息
data = [] #保存一部电影的所有信息
item = str(item)
#link返回的是影片详情链接
link = re.findall(findLink,item)[0] #re库用来通过正则表达式查找指定的字符串
data.append(link) #添加链接
imgSrc = re.findall(findImgSrc, item)[0] #添加图片
data.append(imgSrc)
titles = re.findall(findTitle,item) #片名可能只要一个中文名,没有外文名
if(len(titles) == 2):
ctitle = titles[0]
data.append(ctitle) #添加中文名
otitle = titles[1].replace("/","") #去掉无关外文名
data.append(otitle) #添加外国名
else:
data.append(titles[0])
data.append('') #外文名留空
rating = re.findall(findRating,item) #添加评分
data.append(rating)
judgeNum = re.findall(findRating,item)
data.append(judgeNum) #添加评价人数
inq = re.findall(findInq,item) #添加概述
if len(inq) != 0:
inq = inq[0].replace("。",",") #去掉句号
data.append(inq)
else:
data.append("") #留空
bd = re.findall(findBd,item)[0]
bd = re.sub('<br(\s+)?/>(\s+)?'," ",bd) #去掉<br/>
bd = re.sub('/'," ",bd) #替换/
data.append(bd.strip()) #去掉前后空格
datalist.append(data) #把处理好的一部电影的信息储存在datalist
#print(datalist)
return datalist #保存获取的网页
#得到指定一个URL的网页内容
def askURL(url):
head = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0"
}
request = urllib.request.Request(url,headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode('utf-8')
#print(html)
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e,"code")
if hasattr(e,"reason"):
print(e, "reason")
return html
#3.保存数据
def saveData(datalist,savepath):
print("saving")
book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建workbook对象
sheet = book.add_sheet('电影Top250',cell_overwrite_ok=True) #创建工作表
col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")
for i in range(0,8):
sheet.write(0,i,col[i]) #列名
for i in range(0,250):
print("第%d条" %(i+1))
data = datalist[i]
for j in range (0,8):
sheet.write(i+1,j,data[j]) #数据
book.save('电影top250.xls') #保存
#当程序执行时,调用以下函数
if __name__=="__main__":
main()
print("爬取完毕")
'''