设计思路:
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) 延时控制可选
"""