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