#只用了bs4解析网页 #单线程,速度慢 #么么哒 import requests from bs4 import BeautifulSoup import os import os.path import time import random import json headers={'Referer':'http://www.mmjpg.com/',"User-Agent":"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"} with open('proxies.json','r') as f: #将代理读取进列表 proxy_pool = f.readlines() proxies=json.loads(random.choice(proxy_pool)) #随机选取一个代理 def get_text(url,cont = False,proxies=proxies): #获取网页的text或者content r = requests.get(url,headers=headers,proxies=proxies) r.encoding = 'utf-8' if cont == True: h = r.content else: h = r.text return h def load_one_folder(url): #下载单个系列的所有图片 folder_text = get_text(url) folder_soup = BeautifulSoup(folder_text,'lxml') dirname = folder_soup.h2.string index = url[24:] #该系列的id print ('正在保存:' + index + ':' + dirname) print ('网址为:' + url) if not os.path.exists(index + ':' + dirname): #文件夹以id+标题的形式命名 os.mkdir(index + ':' + dirname) else: pass page_num = folder_soup.find(id='page') a = page_num.find_all('a') max=int(a[-2].string) #该系列下的页面总数 print ('本系列一共有' + str(max) +'张图') for i in range(1,max+1): img_url = url + '/'+ str(i) #构造单张图片的网址 img_text = get_text(img_url) s = BeautifulSoup(img_text,'lxml') content =s.find_all(id='content') for c in content: img = c.find('img') src = img['src'] # 高清无码大图地址 print ('正在保存' + src) content = get_text(src,True) #获取图片二进制文件 with open(index + ':' + dirname + '\\' +src.split('/')[-1],'wb')as f: f.write(content) print('——'*30) #分隔符 def main(i=1): #参数为开始的网址ID,默认为1 base_url = 'http://www.mmjpg.com/mm/' try: while True: folder_url = base_url + str(i) load_one_folder(folder_url) i += 1 except: with open('i.txt','w') as f: #创建文件夹保存断点处的网址ID f.write(str(i)) print ('本次爬取在' + folder_url + '处中断,中断原因可能为IP被封,现在为您切换Uers-Agent。您也可以手动结束本程序,下次启动时将会从中断处的网址继续爬取。') proxies=json.loads(random.choice(proxy_pool)) #随机更换一个代理 print ('本次使用代理为:' + str(proxies)) main(i) if __name__ == '__main__': if 'i.txt' in os.listdir('.'): #在当前文件夹下寻找i.txt文件,如果有的话,读取里面的值,接着上次发生中断的网址继续爬取 with open('i.txt','r') as f: i = int(f.read()) main(i) else: #如果没有,那么默认从第一个网址开始 main()
自动爬取自动生成文件夹以及图片
proxies.json在链接里 ,文件放置位置如下
所需python库 requests BeautifulSoup
python版本3.7.1
友情分享 技术驱动, 请勿举报 高产健儿
您的每一个喜欢,评论,与关注都是对博主的最大鼓励与支持,
关注博主,可以分享到最新的知识,解决现有的问题~ 蟹蟹你