Python turtle 生成鸡哥动图,以及对鸡哥图片的爬取(附源码,注释)

大一上学期Python大作业:
简述:
一. python turtle 库绘图,并实现动图效果
(1)篮球召唤阵
(2)铁山靠及打球
(3)哥哥投篮
(4)对鸽鸽的真心
二. 爬虫爬取鸡哥图片
(1)爬取图片
图片展示:
Python turtle 生成鸡哥动图,以及对鸡哥图片的爬取(附源码,注释)_第1张图片Python turtle 生成鸡哥动图,以及对鸡哥图片的爬取(附源码,注释)_第2张图片
Python turtle 生成鸡哥动图,以及对鸡哥图片的爬取(附源码,注释)_第3张图片
Python turtle 生成鸡哥动图,以及对鸡哥图片的爬取(附源码,注释)_第4张图片
Python turtle 生成鸡哥动图,以及对鸡哥图片的爬取(附源码,注释)_第5张图片

温馨提示:#输入0:篮球召唤阵、铁山靠和打篮球,输入1:爬虫,

代码展示:

import turtle as t
import random as ra
import warnings
import time
import datetime
import re
import os
import requests
from bs4 import BeautifulSoup
#输入0:篮球召唤阵、铁山靠和打篮球,输入1:爬虫,
warnings.filterwarnings('ignore')
ys=['red','orange','yellow','green','blue','cyan','purple','gold','pink','peru']
c=eval(input(''))
def y():#随机生成颜色
    return ra.choice(ys)
def mb():#开始记录
    t.penup()
    t.home()
    t.begin_poly()
def me(pn):#结束
    t.end_poly()
    poly = t.get_poly()
    t.register_shape(pn, poly)
def xl(p):#模拟球的反弹效果
    for i in range(p):
        a.fd(i/25)
    for i in range(p-25):
        a.bk(p/25-1-i/30)
def pq():#拍球
    a.showturtle()
    for i in range(2):
        for i in range(100):
            a.fd(i/25)
        for i in range(100):
            a.bk(4-i/25-0.13)
def yq():#运球
    a.showturtle()
    for i in range(2):
        a.lt(45)
        for i in range(118):
            a.fd(i/25)
        a.lt(90)
        jg.bk(610)
        for i in range(118):
            a.fd(118/25-i/25)
        for i in range(118):
            a.bk(i/25)
        a.lt(90)
        jg.fd(610)
        for i in range(118):
            a.fd(118/25-i/25)
        a.left(135)
def yl():#投球
    a.hideturtle()
    a.left(161)
    a.showturtle()
    for i in range(110):
        if i<=50:
            a.fd(7-i/50)
            a.right(1)
        else:
            a.fd(5+i/50)
            a.right(1) 
    a.right(50)
    xl(135)
    xl(118)
    a.forward(100)
    a.hideturtle()
    a.home()
    a.showturtle()
def f(a,b,y=10):#画箭,a,b为箭尖坐标
    global l
    l=y
    t.penup()
    t.goto(a,b)
    t.pendown()
    t.pencolor("pink")#画半颗爱心
    t.fillcolor("pink")
    t.begin_fill()
    t.fd(4*y)
    t.circle(2*y,180)
    t.right(135)
    t.penup()
    t.fd(8.5*y)
    t.pensize(0.9*y)
    t.pencolor('NavajoWhite3')
    for i in range(3):#画箭羽
        t.penup()
        t.fd(1.5*y)
        t.pendown()
        t.left(45)
        for z in range(2):
            t.fd(3*y)
            t.bk(3*y)
            t.right(90)
        t.left(135)
    t.pensize(0.6*y)#画箭体
    t.pencolor('brown4')
    t.bk(13*y)
    t.left(45)
    t.pencolor("pink")#画另外半颗爱心
    t.fillcolor("pink")
    t.pensize(0.1*y)
    t.circle(2*y,180)
    t.fd(4*y)
    t.end_fill()
    def z(x,m,z):#画内层爱心,x为距离,m为大小,z为颜色, x+y应为4*y
        t.penup()
        t.bk(x)
        t.left(90)
        t.fd(x)
        t.fillcolor(z)
        t.begin_fill()
        t.fd(m)
        t.circle(m/2,180)
        t.right(90)
        t.circle(m/2,180)
        t.fd(m)
        t.end_fill()
        t.penup()
        t.fd(x)
        t.left(90)
        t.bk(x)
        t.right(90)
    z(y,3*y,'red')
    z(2*y,2*y,'red3')
    z(3*y,y,'red4')
    t.left(90)    
def il(a,b,c,d,e):#打印文字,a,b为坐标,c为颜色,d为内容,e为大小
    t.penup()
    t.goto(a,b)
    t.color(c)
    write=t.write(d,font=('宋体',e,'normal'))
def gw(n):#画鸡哥时回到原位
    t.penup()
    t.goto(n)
    t.pendown()
if c==0:#0篮球召唤阵、铁山靠和打篮球
    t.hideturtle()
    t.speed(0)
    #os.startfile(r'shajilang.mp3')#打开同文件夹名为shajilang.mp3的音乐
    t.screensize(bg='black')#篮球召唤阵
    mb()#画篮球(始)
    t.hideturtle()
    t.right(90)
    t.fd(30)
    t.left(90)
    t.circle(30)
    t.left(90)
    t.fd(60)
    t.left(90)
    for i in range(2):
        t.circle(30,45)
        t.left(90)
        t.circle(-30,90)
        t.left(90)
        t.circle(30,45)
    t.circle(30,90)
    t.left(90)
    t.fd(60)
    me('a')#画篮球(终)
    tl=[]
    for i in range(6):#六个篮球
        tl.append(t.Turtle(shape='a'))
    for i in range(6):
        tl[i].speed(0)
        tl[i].shapesize(1,1,2)
        tl[i].fillcolor('peru')
        tl[i].shape("a")
        tl[i].right(60*i)
        tl[i].penup()
        tl[i].pencolor(ys[i])
    for i in range(6):
        for u in range(25):  
            tl[i].fd(16)     
    for i in range(6):
            tl[i].rt(150)
            tl[i].fillcolor(y())
    for i in range(6):
        tl[i].pendown()
    for i in range(70):
        for o in range(6):
            tl[o].fd(9.94)
    for i in range(6):
        tl[i].right(60)
        tl[i].fillcolor(y())
    for i in range(60):
        for o in range(6):
                tl[o].circle(-400,1)
    for i in range(30):
        for o in range(6):
                tl[o].circle(-400,1)
                tl[o].fillcolor(y())
    for i in range(6):
        tl[i].lt(60)
        tl[i].fillcolor(y())
    for i in range(70):
        for o in range(6):
            tl[o].bk(9.94)
    for i in range(6):
        tl[i].pu()
        tl[i].home()
        tl[i].pendown()
    for i in range(6):
        tl[i].shapesize(1, 1, 1)
        tl[i].right(60*i-30)
        tl[i].penup()
        tl[i].fd(200)
        tl[i].pendown()
    for i in range(6):
        tl[i].rt(150)
        tl[i].fillcolor(y())
    for i in range(35):
        for o in range(6):
            tl[o].fd(9.94)
    for i in range(6):
        tl[i].right(60)
        tl[i].fillcolor(y())
    for i in range(60):
        for o in range(6):
                tl[o].circle(-200,1)
    for i in range(6):
        tl[i].pu()
        tl[i].home()
        tl[i].pendown()
    mb()#画第一张鸡哥(始)
    t.right(90)
    t.right(15)
    t.fd(61)
    t.right(45)
    t.fd(61)
    t.right(10)
    t.fd(61)
    t.left(60)
    t.fd(17)
    t.right(70)
    t.fd(8)
    t.right(100)
    t.fd(29)
    t.right(90)
    t.fd(10)
    t.left(20)
    t.fd(45)
    t.left(25)
    t.forward(65)
    t.left(55)
    t.fd(28)
    t.left(35)
    t.fd(28)
    t.left(37)
    t.fd(55)
    t.left(5)
    t.fd(21)
    t.right(90)
    t.forward(29)
    t.right(135)
    t.fd(21)
    t.left(42)
    t.fd(67)
    t.right(20)
    t.fd(62)
    t.left(78)
    t.forward(25)
    t.right(35)
    t.fd(12)
    t.right(60)
    t.fd(49)
    t.right(30)
    t.fd(21)
    t.left(100)
    t.fd(17)
    t.right(85)
    t.fd(30)
    t.rt(110)
    t.fd(8)
    t.lt(90)
    t.fd(14)
    t.rt(80)
    t.fd(20)
    t.rt(65)
    t.fd(20)
    t.lt(89)
    t.fd(31)
    t.rt(45)
    t.fd(28)
    t.rt(30)
    t.fd(33)
    t.rt(60)
    t.fd(8)
    t.rt(18)
    t.fd(25)
    t.rt(90)
    t.fd(45)
    t.rt(45)
    t.fd(30)
    t.lt(105)
    t.fd(7)
    t.lt(75)
    t.fd(29)
    t.rt(90)
    t.fd(31)
    t.lt(80)
    t.fd(7)
    t.lt(100)
    t.fd(36)
    t.rt(45)
    t.fd(42)
    t.rt(90)
    t.fd(26)  
    me('jg')#画第一张鸡哥(终)
    mb()#画地板(始)
    t.left(90)
    t.bk(2100)
    me('d')#画地板(终)
    mb()#画篮筐(始)
    t.fd(250)
    t.bk(30)
    t.right(90)
    t.fd(180)
    t.bk(10)
    t.left(100)
    t.fd(100)
    t.left(80)
    t.forward(80)
    t.left(80)
    t.forward(100)
    t.right(80)
    t.fd(55)
    me('b')#画篮筐(终)
    t.clearscreen()
    t.hideturtle()
    jg=t.Pen()
    jg.shapesize(2, 2, 2)
    jg.hideturtle()
    jg.penup()
    jg.goto(-80,30)
    jg.left(180)
    jg.shape("jg")
    jg.pencolor('black')
    jg.fillcolor('white')
    jg.showturtle()
    jg.speed(0.6)
    time.sleep(0.7)
    for i in range(2):#铁山靠
        jg.right(30)
        jg.fd(150)
        jg.bk(150)
        jg.left(30)
        jg.fd(150)
        jg.bk(150)
    jg.speed(0.6)
    d=t.Pen()#地板
    d.hideturtle()
    d.penup()
    d.goto(3000,-222)
    d.shape("d")
    d.pencolor('black')
    d.fillcolor('white')
    d.showturtle()
    d.bk(2000)
    jg.fd(500)
    jg.bk(400)
    a=t.Pen()#篮球
    a.penup()
    a.hideturtle()
    a.shapesize(1, 1, 1)
    a.fillcolor('peru')
    a.shape("a")
    a.right(90)
    a.pencolor('black')
    b=t.Pen()#篮筐
    b.penup()
    b.hideturtle()
    b.shapesize(1, 1, 1)
    b.fillcolor('white')
    b.shape("b")
    b.pencolor('black')
    b.penup()
    b.goto(700,400)
    b.pendown()
    yq()
    jg.hideturtle()
    t.speed(0)#画第二张鸡哥(始)
    t.pendown()
    t.pencolor('white')
    t.fd(30)
    t.left(90)
    t.pencolor('black')
    t.circle(30)#球
    t.fd(25)
    t.left(120)
    t.fd(20)
    t.right(120)
    t.circle(-15,90)
    t.fd(5)
    t.circle(-5,90)
    t.right(17)
    t.fd(29)
    t.bk(34)
    t.right(93)
    t.fd(100)
    t.rt(20)
    t.fd(50)
    t.lt(15)
    t.fd(30)
    c=t.pos()
    t.lt(150)
    t.fd(15)
    t.rt(40)
    t.fd(25)
    t.rt(10)
    t.fd(150)#背带
    t.rt(180)
    t.fd(90)
    t.rt(5)
    t.fd(20)
    t.rt(5)
    t.fd(20)
    t.rt(60)
    t.fd(10)
    t.rt(30)
    t.fd(85)#手
    t.penup()
    t.goto(c)
    t.pendown()
    t.rt(180)
    t.fd(10)
    d=t.pos()
    t.lt(150)
    t.fd(15)
    t.rt(40)
    t.fd(25)
    t.rt(10)
    t.fd(150)
    t.penup()
    t.goto(d)
    t.rt(90)
    t.pendown()
    t.fd(20)
    t.rt(77)
    t.fd(15)
    t.rt(40)
    t.fd(10)
    t.lt(35)
    t.fd(20)
    k=t.pos()
    t.lt(110)
    t.fd(10)
    t.lt(80)
    t.fd(30)
    gw(k)
    t.rt(190+60)
    t.fd(20)
    t.lt(60)
    t.fd(10)
    t.lt(10)
    t.circle(18,80)
    t.fd(20)
    t.lt(25)
    t.fd(10)
    t.lt(25)
    t.fd(10)
    td=t.pos()#头顶
    t.lt(48)
    t.fd(20)
    t.lt(90)
    t.fd(5)
    t.rt(90)
    t.fd(10)
    t.lt(90)
    t.fd(20)
    gw(td)
    t.rt(180)
    t.rt(25)
    t.fd(10)
    t.rt(25)
    t.fd(10)
    t.lt(60)
    t.fd(20)
    t.circle(18,80)
    t.rt(10)
    t.fd(10)
    t.lt(60)
    t.fd(20)
    zsj=t.pos()
    t.lt(70)
    t.fd(10)
    t.lt(20)
    t.fd(10)
    
    for i in range(3):
        t.rt(23)
        t.fd(8)
    gw(zsj)
    t.rt(90)
    t.fd(7)
    t.lt(25)
    t.fd(30)
    zcl=t.pos()
    t.rt(85)
    t.fd(30)
    ddk=t.pos()
    t.lt(110)
    t.fd(10)
    for i in range(4):
        t.rt(10)
        t.fd(10)
    t.rt(10)
    t.fd(140)
    gw(ddk)
    t.rt(42)
    t.fd(20)
    ddk=t.pos()
    t.lt(90)
    t.fd(10)
    for i in range(4):
        t.rt(10)
        t.fd(10)
    t.rt(10)
    t.fd(130)
    sbs=t.pos()
    gw(ddk)
    t.rt(25)
    t.fd(20)
    for i in range(5):
        t.lt(3)
        t.fd(45)
    t.lt(30)
    t.fd(25)
    t.lt(45)
    t.fd(8)
    t.lt(90)
    t.fd(8)
    t.lt(45)
    t.fd(18)
    t.rt(160)
    t.fd(9)
    t.lt(90)
    t.fd(9)
    t.lt(90)
    t.fd(12)
    t.rt(10)
    t.fd(7)
    t.rt(80)
    for i in range(5):
        t.lt(10)
        t.fd(35)
    ys=t.pos()
    il(-700,-87.53,'black','练习时长两年半的右手→',20)
    gw(ys)
    t.bk(50)
    for i in range(5):
        t.rt(3)
        t.bk(10)
    
    #上半身结束
    t.rt(90)
    t.fd(15)
    sbs=t.pos()
    t.fd(15)
    t.lt(30)
    t.fd(75)
    t.lt(10)
    t.fd(65)
    gw(sbs)
    t.rt(105)
    t.fd(50)
    t.lt(10)
    t.fd(35)
    t.lt(10)
    t.fd(20)
    for i in range(5):
        t.rt(2)
        t.fd(22)
    t.fd(50)
    #左下角
    t.rt(7)
    t.fd(38)
    t.lt(100)
    t.fd(40)
    t.lt(100)
    t.fd(30)
    t.rt(10)
    t.fd(17)
    t.lt(90)
    t.fd(27)
    t.bk(27)
    t.rt(90)
    #鞋子
    t.rt(35)
    for i in range(5):
        t.lt(8)
        t.fd(15)
    t.rt(15)
    t.fd(20)
    t.lt(30)
    t.fd(10)
    t.rt(50)
    t.fd(30)
    t.rt(45)
    t.fd(25)
    t.rt(70)
    t.fd(30)
    t.rt(30)
    t.fd(35)
    t.rt(20)
    t.fd(15)
    t.lt(90)
    t.fd(5)
    t.rt(70)
    t.fd(30)
    t.rt(15)
    t.fd(35)
    #右下角
    t.fd(30)
    t.lt(70)
    t.fd(50)
    t.lt(45)
    t.circle(15,120)
    t.fd(19)
    t.rt(60)
    t.fd(10)
    t.lt(100)
    t.fd(35)
    t.bk(35)
    t.rt(100)
    t.fd(90)
    t.lt(16)
    t.fd(168)
    gw(zcl)
    t.rt(183)
    t.fd(25)
    t.lt(95)
    t.fd(30)
    t.lt(30)
    t.fd(40)
    gw(zsj)
    t.rt(30)
    t.penup()
    t.fd(30)
    t.pendown()
    print(t.pos())
    il(-205.95,110.16,'black','答',40)
    t.penup()#画第二张鸡哥(终)
    pq()#开始拍球        
    b.showturtle()
    yl()#投球
    time.sleep(1)
    t.clearscreen()
    t.hideturtle()
    t.speed(0)  
    f(-100,0,20)#画箭
    f(l-100,8*l,17)
    f(15*l-100,5*l,14)    
    il(-270-5*l,-120-7*l,'green','只为真爱',70+5*l)
    il(190-5*l,-320-6*l,'red','''by: 鸡你太美小组
    ''',40+2*l)
    time=datetime.datetime.today()#获取时间
    il(190-5*l,-300-5*l,'red','-'+str(time)[:19],15+l)#打印时间
    t.done()
if c==1:#1爬虫
    wjjm=input('请输入想保存至那个文件夹:')#例如: D://test
    #os.startfile(r'kaituan.mp3')#打开同文件夹名为kaituan.mp3的音乐
    url='https://cn.bing.com/images/search?q=蔡徐坤鸡哥图片&qs=n&form=QBIR&sp=-1&pq=蔡徐坤鸡哥图片&sc=0-7&cvid=F9190048D6894D328875918A12BAC96F&ghsh=0&ghacc=0&first=1&tsc=ImageHoverTitle'
    head = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.56'}
    os.chdir(wjjm)
    Img = re.compile(r'img.*src="(.*?)"')#正则匹配图片
    datalist = []
    response = requests.get(url, headers=head)
    html = response.text
    soup = BeautifulSoup(html, "html.parser")
    data = []
    for item in soup.find_all('img', src=""):
        item = str(item)
        picture = re.findall(Img, item)
        for b in picture:
            data.append(b)
            datalist.append(data[-1])    
    print(len(datalist))#打印保存图片数目
    i=0
    for m in datalist:
        ri = requests.get(m)
        bt = ri.content
        i+=1
        with open("jgtp{}.jpg".format(i), "wb") as f:
                f.write(bt)
最后强调:我们都是真iKun,不喜勿喷。

你可能感兴趣的:(python,开发语言,爬虫,numpy)