先上代码:
from urllib.request import Request, urlopen, urlretrieve from fake_useragent import UserAgent import time import re def get_html(rul): # 设置请求头 headers = { 'User-Agent': UserAgent().random } request = Request(rul, headers=headers) response = urlopen(request) info = response.read().decode() return info def main(): n = int(input('请输入要下载的页数:')) start_time = time.time() for j in range(1, n+1): if j == 1: rul = get_html('http://sc.chinaz.com/tupian/xingganmeinvtupian.html') else: rul = get_html('http://sc.chinaz.com/tupian/xingganmeinvtupian_%s.html' % j) regex = re.compile(r'http://pic\d?.sc.chinaz.com/Files/pic/pic9/\d{,6}/[az]+pic\d{,5}_s.jpg') img = regex.findall(rul) for i in range(len(img)): filename = 'D:\python_work\爬虫\图片\第' + str(j) + '页第' + str(i+1) + '张图片.jpg' url = img[i] urlretrieve(url, filename) print('第' + str(j) + '页第' + str(i+1) + '张图片下载成功') end_time = time.time() spend_time = round(end_time - start_time, 2) print('程序运行', end='') print(spend_time, end='') print('秒') if __name__ == '__main__': main()以http://sc.chinaz.com/该网站为例,打开首页如图: 随便选个标签 ,这里我选的“性感美女”: 地址栏显示地址为:http://sc.chinaz.com/tupian/xingganmeinvtupian.html,这里是第一页的地址栏,浏览到第二页时如下:显示地址栏为:http://sc.chinaz.com/tupian/xingganmeinvtupian_2.html,相比第一页网址后面多了个_2,继续往后面浏览发现网址依次是_3 ,_4,_5…,但是尝试按照这个规律打开第一页网址时sc.chinaz.com/tupian/meinvxiezhen_1.html,却报错了所以设置了个if判断语句,来把访问第一页和第二页及以后的页面区别开来,暂时想不出还有啥别的办法。 再来说趴的第一页图片。打开第一页后按F12打开浏览器的开发者模式,把网页刷新一下 刷新之后往下滑可以找到第一张图片的链接信息点击去可以发现图片的链接:http://pic2.sc.chinaz.com/Files/pic/pic9/202008/apic27331_s.jpg 再随便查看其他几张图片的链接地址: http://pic2.sc.chinaz.com/Files/pic/pic9/202008/apic27281_s.jpg http://pic.sc.chinaz.com/Files/pic/pic9/202008/apic27263_s.jpg http://pic.sc.chinaz.com/Files/pic/pic9/201911/zzpic21548_s.jpg http://pic.sc.chinaz.com/Files/pic/pic9/201708/zzpic5527_s.jpg 如此发现一些规律: 所以构造这样的正则表达式: regex = re.compile(r'http://pic\d?.sc.chinaz.com/Files/pic/pic9/\d{,6}/[az]+pic\d{,5}_s.jpg') 之后就是一个for循环一次输出第几页的第几张图片,再用urlretrieve(url, filename)来保存下载的文件,最后加了个计时的功能,但是+只能拼接字符串,没法拼接小数,所以就用了三个print把程序运行17.92秒这几个字拼接起来,有老哥有好的想法也可告知一下。运行程序后结果如下,先输入要下载的页数,我输入的4,(尝试下载第一页和前几页都没问题): 然后再查看下载好的文件: 看起来不错,哈哈,感觉奇怪的技能又增加了。。。