前言:小编也是现学现卖,方便自己记忆,写的不好的地方多多包涵,希望各位大佬多多批评指正。
1.此处以布卡漫画网站为例!
import urllib.request as u
#调用urllib文件夹(包) as u 简化urllib.request 为 u
#request #打开主页设定请求信息,获取web页面信息
import re #调用正则表达模块
def get_html(url):
"我的功能是打开目标主页并获取整个html数据"
request = u.Request(url) #添加要下载图片地址
request.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64;\
x64; rv:77.0) Gecko/20100101 Firefox/77.0") #添加头部信息
response = u.urlopen(request)
html = response.read()
return html
#http://i-cdn.ibuka.cn/pics/223321/65614/t6501310_0014.jpg
#http://i-cdn.ibuka.cn/pics/223321/65614/t6501310_0015.jpg
#http://i-cdn.ibuka.cn/pics/223321/65595/t6406261_0002.jpg
def get_imglist(html):
"我的功能是负责整个页面的图片地址并做出一个列表"
allimglist = []
imglist = re.findall(b"http://i-cdn.ibuka.cn/pics/\d{6}/\d{5}/\w{13}.jpg",html)
#二进制的地址列表,{60} 是通过 print(len(u27xxx.jpg) 看出来的
#print(imglist)
for i in imglist:
allimglist.append(str(i,encoding='utf8')) #完整的地址拼接
print(allimglist)
#return allimglist
def get_imgs(imglist):
"我的功能是复制根据图片地址列表下载图片"
num = 0
for url in imglist:
num += 1
snum = str(num) #将整数转成字符串
snum = snum.zfill(2) #要求字符串必须满足2为,不满足前面补零(01,02,03)
imginfo = get_html(url) #调用函数返回图片2进制信息
with open("%s.jpg" %snum,"wb") as f:
f.write(imginfo)
if __name__ == "__main__":
url = "http://www.buka.cn/view/223321/65614.html"
#url = "http://www.buka.cn/view/221735/65538.html"
html = get_html(url)
imglist = get_imglist(html)
get_imgs(imglist)
如果想更换网站爬取图片,前提不带https 的网站,需要将url 地址转变,同时对应的imglist = re.findall(b"xx") 正则表达式也要发生改变。至于规则则根据你爬取的网站的图片规则取定义。