简简单单爬一个网站, 动漫图片网址里面有很多好看的动漫图片,所以想都下载下来,这个代码是前两页的内容,可以通过修改循环中的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=None
return html_str
if __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_url
for 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=0
for image in a:
image=requests.get(image).content
path = "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 += 1
print(str(i) + '正在保存')
print("第%d页保存完毕"%n)
n+=1
print("全部图片保存完毕")
这是爬下来的图片,执行间隔短的话会出现一样图片不一样名字的现象