【python爬虫】千图网素材

写在前面

千图网是很久之前写的了,今天打开运行了一下发现还可以正常执行,说明class类名什么的应该都没有更新,只是页面换了一个新的效果

文章与程序目的仅是技术练习,不会对服务器等造成影响,也不用于商业用途

其他/她由于运行本文的源代码对千图网造成任何影响或用于其它商业用途作者概不负责,请自觉遵守法律法规

目标

目标地址:千图网-免费在线设计图片素材网站-正版商用素材图库模板大全

临近清明节了,所以刚进入网站主页就是清明节相关的素材展示,这里随便点了一个模块进去复制了链接还可以正常获取到素材图

地址:【清明创意祝福】模板素材下载-千图网

具体实施

整体思路还是F12先初步审查页面,然后通过Request请求、BeautifulSoup解析来确认需要获取的class或者id和目标元素,然后获取到之后保存,将路径进行拼接形成完整下载路径,通过request请求目标下载图片路径保存下来,由于是之前写的就没法从头过一遍了,时间有限,直接上代码了

具体可以自己去从头到尾分析一边,写一遍代码就通神了

完整代码

import  os
import  time
import  requests
import base64
from bs4 import  BeautifulSoup
from  urllib.parse import urljoin
from  urllib.parse import urlparse
from io import BytesIO
from PIL import Image
import  random
#校验输入的域名
def is_vaild_url(url):
    try:
        result = urlparse(url)
        return all([result.scheme,result.netloc])
    except:
        return False


# 下载图片
def download_images(base_url,save_dir):
   #首先设置请求头
    headers = {'User-Agent':'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML,like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    try:
        website_context = requests.get(base_url,headers=headers)
        website_context.raise_for_status()

    except requests.RequestException as e:
        print(f"Error fetching the URL:{e}")
        return

    soup = BeautifulSoup(website_context.content,'html.parser')
    images = soup.find_all('img',class_="lazy",src=True)
    for index,i in enumerate(images):
        print("相对路径为:"+i['data-original'])
        xiangdui_url = i['data-original']
        images_url = urljoin(base_url,xiangdui_url)
        print("拼接后的完整路径:"+images_url)

        try:
            img_download = requests.get(images_url, headers=headers)
            img_download.raise_for_status()
        except requests.RequestException as e:
            print(f"Error downloading image {images_url}: {e}")
            continue


        filename = os.path.join(save_dir, f"img_{index}.webp")
        with open(filename, 'wb') as f:
            f.write(img_download.content)
            print(f"{img_download} saved successfully")
            time.sleep(random.uniform(5, 15))

# 主方法
def main():
    base_url = input("请输入网址:")
    if not is_vaild_url(base_url):
        print("Invalid URL. Please enter a valid URL.")
        return
    save_dir = "C:/Users/Administrator/Desktop/lg"
    download_images(base_url,save_dir)
#入口
if __name__ == "__main__":
    main()

最终效果

【python爬虫】千图网素材_第1张图片

【python爬虫】千图网素材_第2张图片

你可能感兴趣的:(爬虫,html,前端)