2019-07-03

import requests
from bs4 import BeautifulSoup
import re
import os, time
import threading, pygame,multiprocessing



def getNF(url):
    r = requests.get(url)
    r.encoding = "utf-8"
    soup = BeautifulSoup(r.text, 'lxml')
    for ai in soup.select("a[href^='/gif/']"):
        try:
            ns = ai.img["alt"][::4]
            fs = ai["href"]
            yield ns, fs
        except:
            continue


def getspan(span, i, a, b):
    s = 1 + a
    for ii in span[a:b]:
        try:
            start = time.perf_counter()
            url = "http://m.gifqq.com/" + ii['value']
            print(url)
            r = requests.get(url, timeout=30)
            time.sleep(1)
            r.encoding = 'utf-8'
            s1 = BeautifulSoup(r.text, 'lxml')
            img_url1 = s1.img["src"]
            print("img_url1" + ":" + img_url1)
            writ(img_url1, i[0], s)
            print(str(i[0]) + str(s) + "is done")
            s += 1
            print("一个GIF用了{:.2f}秒".format(time.perf_counter() - start))
            print(a, b)
        except:
            print("timeout")
            print(a, b)
            continue


def writ(img_url, n1, n2):
    try:
        r = requests.get(img_url, timeout=30)
        if len(r.content) < 60 * 1024:
            print("D://RequestsCache/gif/" + str(n1) + "/" + str(n2) + ".gif" + '已经挂了!')
            print('\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n')
            pass
        else:
            print("D://RequestsCache/gif/" + str(n1) + "/" + str(n2) + ".gif")
            with open("D://RequestsCache/gif/" + str(n1) + "/" + str(n2) + ".gif", 'wb')as f:
                f.write(r.content)
                f.close()
                print("write OK")
    except:
        print("图片超时")


def getgifs(url):
    for i in getNF(url):
        os.chdir("D://RequestsCache/gif/")
        if os.path.exists(i[0]):
            print("已经存在!")
            continue
        else:
            os.mkdir(i[0])
        os.chdir('D://RequestsCache/gif/' + i[0])
        rgif = requests.get("http://m.gifqq.com" + i[1])
        print("http://m.gifqq.com/" + i[1])
        rgif.encoding = 'utf-8'
        sgif = BeautifulSoup(rgif.text, 'lxml')
        span = sgif.select('option')
        a = re.findall('\(\d{1,4}\)', span[-1].text)[0][1:-1]
        with open('{}.txt'.format(a), 'w')as f:
            f.close()

        ts1 = threading.Thread(target=getspan, args=(span, i, 0, len(span) // 10))
        ts2 = threading.Thread(target=getspan, args=(span, i, len(span) // 10, len(span) // 10 * 2))
        ts3 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 2, len(span) // 10 * 3))
        ts4 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 3, len(span) // 10 * 4))
        ts5 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 4, len(span) // 10 * 5))
        ts6 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 5, len(span) // 10 * 6))
        ts7 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 6, len(span) // 10 * 7))
        ts8 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 7, len(span) // 10 * 8))
        ts9 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 8, len(span) // 10 * 9))
        ts10 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 9, len(span) // 10 * 10))
        ts11 = threading.Thread(target=getspan, args=(span, i, len(span) // 10 * 10, len(span)))

        ts1.start()
        ts2.start()
        ts3.start()
        ts4.start()
        ts5.start()
        ts6.start()
        ts7.start()
        ts8.start()
        ts9.start()
        ts10.start()
        ts11.start()
        ts1.join()
        ts2.join()
        ts3.join()
        ts4.join()
        ts5.join()
        ts6.join()
        ts7.join()
        ts8.join()
        ts9.join()
        ts10.join()
        ts11.join()

        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))
        print('{:*^100}'.format(""))

if __name__ == '__main__':
    for i in range(2, 999,8):
        stten = time.perf_counter()
        ur0 = 'http://m.gifqq.com/gif/index_{}.html'.format(i)
        ur1 = 'http://m.gifqq.com/gif/index_{}.html'.format(i+1)
        ur2 = 'http://m.gifqq.com/gif/index_{}.html'.format(i+2)
        ur3 = 'http://m.gifqq.com/gif/index_{}.html'.format(i+3)
        ur4 = 'http://m.gifqq.com/gif/index_{}.html'.format(i+4)
        ur5 = 'http://m.gifqq.com/gif/index_{}.html'.format(i+5)
        ur6 = 'http://m.gifqq.com/gif/index_{}.html'.format(i+6)
        ur7 = 'http://m.gifqq.com/gif/index_{}.html'.format(i+7)

        t0 = multiprocessing.Process(target=getgifs, args=(ur0,))
        t1 = multiprocessing.Process(target=getgifs, args=(ur1,))
        t2 = multiprocessing.Process(target=getgifs, args=(ur2,))
        t3 = multiprocessing.Process(target=getgifs, args=(ur3,))
        t4 = multiprocessing.Process(target=getgifs, args=(ur4,))
        t5 = multiprocessing.Process(target=getgifs, args=(ur5,))
        t6 = multiprocessing.Process(target=getgifs, args=(ur6,))
        t7 = multiprocessing.Process(target=getgifs, args=(ur7,))
#如果用threading.Thread(同时操作目录会出错。)
        t0.start()
        t1.start()
        t2.start()
        t3.start()
        t4.start()
        t5.start()
        t6.start()
        t7.start()

        t0.join()
        t1.join()
        t2.join()
        t3.join()
        t4.join()
        t5.join()
        t6.join()
        t7.join()


        print('第{:-^50}页'.format(i))
        pygame.mixer.init()
        pygame.mixer.music.load("D://Bea Miller - I Dare You.mp3")
        pygame.mixer.music.play()
        print('一页共用了{:.2f}秒'.format(time.perf_counter() - stten))
        ten = input("continue?(y\\n):")

        if ten == 'n':
            pygame.mixer.music.stop()
            break

        elif ten == 'y':
            pygame.mixer.music.stop()
            continue
        else:
            while 1:
                ten = input("重新输入(y\\n):")
                if ten in ['y', 'n']:
                    pygame.mixer.music.stop()
                    break
        if ten == 'n':
            break
        elif ten == 'y':
            continue







你可能感兴趣的:(2019-07-03)