设计思路:
1.由三部分组成 AL.py(实现解析返回手机壁纸页面所有的图片链接 字符串数组类型
2.download.py()实现下载功能
3.P_img.py 解析所有手机壁纸页面HTML子页链接 ,并调用AL.py和download.py实现控制。
以下为源码
P_img.py文件
import requests import urllib.request import time import re import AL#自定义解析src import download#自定义下载函数 N=0#控制起始命名 imgName = 0 for page in range(0,32):#循环实现翻页动态爬取/共23页 具有控制页数选择性 page=page+1 i=str(page)#http://moe.005.tv/moeimg/sjbz/list_601_1.html url='http://moe.005.tv/moeimg/sjbz/list_601_'+i+'.html'#根据下标规律实现翻页SJBZ(手机壁纸) 目标抓取所有手机壁纸 imgstr=requests.get(url) #由于子页面 url下标规律暂未找到 所有忽略子页面2以上 只爬去每个子页面的第一页 from bs4 import BeautifulSoup #通过beautifulsoup解析 soup=BeautifulSoup(imgstr.text,'lxml') data=soup.select('body > div.nav_warp > div.nav_w_left > div.zhuti_w_list > ul > li > a')#定位 for item in data:#http://moe.005.tv/57583.html''' href=(item.get('href')) ur=href #返回所有手机壁纸html temp=AL.update(ur)#调用自定义抓取.jpg链接 for src in temp: #使用元组接受 循环遍历打印 download.superdown(src,N)#调用自定义函数下载 print('Now',N) #打印当前序号 N=N+1 """ pattern = re.compile(r'\d+') item=pattern.findall(item.get('href'),17)#正则表达式取链接后5位id print(item)#item是所有手机壁纸端口代码 for id_1 in item: id=str(id_1) ur='http://moe.005.tv/'+id+'.html' item=item.get('href')
AL.py文件
import requests import urllib.request import time def update(r):#自定义 抓取图片链接函数 imgstr = requests.get(r,timeout=10) from bs4 import BeautifulSoup # 解析 soup = BeautifulSoup(imgstr.text, 'lxml') data = soup.select('body > div.nav_warp > div.nav_w_left > div.content_box > div > div.content_nr > div > img') src_list = []#创建数组 保存抓取的src for each in data: # 循环遍历data res= each.get('src') # 抓取src src_list.append(res) #定义数组 返回 return src_list #返回类型位字符串数组
download.py
import urllib import os import time def ds(a, b, c): #计算下载进度 """回调函数 @a: 已经下载的数据块 @b: 数据块的大小 @c: 远程文件的大小 """ per = 100.0 * a * b / c if per > 100: per = 100 print ('%.2f%%' % per) ############ def superdown(r,N):#自定义函数实现下载功能 N_1 = str(N) print(r,'正在下载') try: #简单进行异常判断 urllib.request.urlretrieve(r, 'F:\\py_1\\%s' + N_1 + '.jpg',ds) # 通过使用urlib库实现文件下载 except: print('图片不存在404') # time.sleep(1) 延时控制可选"""