Python爬取图片之“站长素材”

发布于 2021-10-11 14:04

A  爬取页面分析:

2、通过查看源码发现,编码格式是"utf-8"。

3、通过搜索图片标签,发现图片存储是唯一性,给我们提取图片链接的带来方便,只使用re来提取,就能快速提取出来,还有图片标题。

B  演示步骤:

1、观察页面变化:

2、观察页面最大数字:

3、观察页面编码格式:

4、观察图片标签存储格式。


C  代码实现:
import reimport osimport randomimport requestsheaders ={}def header():    #随机分配一个请求头    UA = [    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",    "Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50",    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36",    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0",    "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko",    ]    nu_m =random.randint(0,len(UA)-1) #u-a随机分配    headers["User-Agent"] = UA[nu_m]    return headersdef content_data(url):    #返回二进制数据    res = requests.get(url,headers=header(),timeout=15)    if res.status_code == 200:        return res.content #返回二进制数据def soup(data):    #解析数据,提取图片链接,替换图片链接,存入列表里,返回列表    text = data.decode('utf-8') #由于本网页返回的编码是utf-8,所以解码也用相同的编码方式    text = re.sub(r'\s','',text) #把所有空格、换行符替换成空    text = re.sub(r'\/\/','https://',text) #增加请求头    src = re.findall(r'src2="(.*?)"',text) #提取链接    return srcdef save(name,title,data):    file_path= os.getcwd()+"\\"+name  #定义目录    if not os.path.exists(file_path): #创建保存目录        os.makedirs(file_path)    file_path += "\\{}.jpg".format(title[0]) #title 是列表,提取第一数字    with open(file_path,'wb') as f:        f.write(data)        print(title[0])def save_data(img_src,name,title):    #提取单个src地址    for src in img_src:        data = content_data(src) #返回图片二进制数据        save(name,title,data) #保存图片数据        title[0] += 1 #作用是防止文件名重复def main():        base = "https://sc.chinaz.com/tupian/index_{}.html" #定义链接规则        name = "站长素材高清图片"        title = [0]        for i in range(1, 2518):  #2518            if i == 1:                 url = "https://sc.chinaz.com/tupian/index.html" #访问第一页面地址            else:                url = base.format(i) #第二页开始有规律变化页面地址            data = content_data(url) #第一次返回二进制数据            img_src = soup(data) #返回列表,要下载的图片链接地址            headers['referer'] = url #定义防盗链地址            save_data(img_src,name,title) #进入翻页所有链接的数据保存阶段。if __name__ == "__main__":    main() #启动程序
D  版本更新:
作者会每月末,及时重新测试本程序的有效性,遇到程序无法下载图片,会更新下一个版本,给读者一个优质的体验。
E  责任声明:
本技术仅限于python图片爬取技术分享,不适用于高并发开发环境,若应用于高并发请求导致对方服务器瘫痪,本作者一概不负责。

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材