简简单单爬一个网站, 动漫图片网址里面有很多好看的动漫图片,所以想都下载下来,这个代码是前两页的内容,可以通过修改循环中的range(1,3)来自行选择要下载多少页,还有就是路径在D盘自己创建的爬虫图片里面,第一个代码 是封装的函数,包括请求头,请求格式和请求失败后允许重新请求几次。第二个代码是主体实现代码,主体实现包括一个问题,目前还没想到简单一点的解决方案,因为图片名字也是爬虫爬来的,所以可能原图片姓名会出现特殊字符而无法命名的现象,不过这是极少数情况,希望会的大佬指点一下,或者帮忙完善一下,感激不尽!!!以下是代码和结果截图
#封装函数的代码
#coding = utf-8
import requests
from retrying import retry
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"}
@retry(stop_max_attempt_number=3)
def _parse_url(url,method,data,proxies):print("*"*20)if method =="POST":requests.post(url,data=data,headers=headers,proxies=proxies)else:response=requests.get(url,headers=headers,timeout=3,proxies=proxies)assert response.status_code==200 #状态码return response.content.decode()def parse_url(url,method="GET",data=None,proxies={ }):try:html_str = _parse_url(url,method,data,proxies)except:html_str=Nonereturn html_strif __name__ == '__main__':url="https://www.huashi6.com/"print(parse_url(url))
主要代码实现
#coding=utf-8
import re
import requests
import datetime #日期
import os
from parse_url import parse_urlfor n in range(1,3):url="https://www.huashi6.com/hot_"+ str(n)#测试代码# n+=1# print(url)html_str=parse_url(url)regex=r'img src="(http:.*?.g)"'#正则表达式图片pa=re.compile(regex)#模型ma=re.findall(pa,html_str)#匹配到的数据a=ma[0:len(ma):2]#切片吧头像去除#以下是输出图片类型内容和长度# print(type(a))# print(a)# print(len(a))#名字同上regex1=r' title="(.*?)" class'#正则表达式名字pa1=re.compile(regex1)name=re.findall(pa1,html_str)# print(name)# print(type(name))# print(len(name))i=0for image in a:image=requests.get(image).contentpath = "D:\\pachongtupian\\"#存放路径# 判断是否存在,不存在就创建if not os.path.exists(path):os.makedirs(path)cur = datetime.datetime.now() # 获取当前系统时间,因为网站中的图片会存在重名的情况m=cur.microsecond#唯一标识with open(path+str(name[i])+str(cur.month)+str(cur.day)+str(cur.minute)+str(m)+'.jpg','wb') as f:f.write(image)i += 1print(str(i) + '正在保存')print("第%d页保存完毕"%n)n+=1print("全部图片保存完毕")
这是爬下来的图片,执行间隔短的话会出现一样图片不一样名字的现象