• Python爬取堆糖帅哥照片


    import requests
    import urllib.parse
    import threading
    
    #当线程达到十个时就锁住
    thread_lock = threading.BoundedSemaphore(value=10)
    #function:获得json数据
    #url:api
    #page:返回json数据
    def get_page(url):
        #requests.get自带json.load 用于获取 page信息
        page = requests.get(url)
        #获取url的内容
        page = page.content
        #将字节转换成utf-8格式
        page = page.decode('utf-8')
        return page
    
    #function:获得所有页面的api
    #label为你要搜索的关键字
    #获取所有页面pages中的链接
    def pages_from_duitang(label):
        #创建pages 存放获取到的链接并返回
        pages = []
        url = "https://www.duitang.com/napi/blog/list/by_search/?kw={}&start={}&limit=1000"
        for index in range(0,3600,50):
            #两个变量分别替换两个占位符{}
            u = url.format(label,index)
            page = get_page(u)
            pages.append(page)
        return pages
    #function:获取单个图片地址
    #page是从get_page请求回来的页面信息
    #startpage是开始匹配的部分
    #endpart是字符串末尾匹配的部分
    def findall_in_page(page,startpage,endpart):
        #all_string存放所有的照片地址
        all_string = []
        end = 0
        while page.find(startpage,end)!=-1:
            #start为字符串开始的地址 ,从第end个字符开始查找,查找到第一个出现startpage的地址赋值给start
            start = page.find(startpage,end)+len(startpage)
            #从字符串第start位置开始查找,查到到第一个endpart字符串的位置
            end = page.find(endpart,start)
            #获得从start开始到end为止的字符串 赋值给变量 string
            string = page[start:end]
            #存入列表中
            all_string.append(string)
        return all_string
    
    #function:获取所有的图片地址
    #pages:从url请求的所有的页面信息
    def pic_urls_from_pages(pages):
        #print("啊哈,请给我一杯忘情水")
        #创建列表,存放所有的图片地址
        pic_urls = []
        #遍历所有的页面信息
        for page in pages:
            #获取一个的图片地址 赋值给urls
            urls = findall_in_page(page,'path":"','"')
            #print("urls is the {}".format(urls))
            #将获取到的单个图片地址添加到列表pic_urls中
            pic_urls.extend(urls)
    
        return pic_urls
    
    #function:下载图片并命名
    #url:下载图片的地址
    #n:照片的名字
    def download_pics(url,n):
        r = requests.get(url)
        #print("我是r[]",r)
        #生成图片的相对地址
        path = 'D:\CodeProject\pythonProject\pics\' + str(n) + '.jpg'
        #以可读写的方式打开二进制文件path
        with open(path,'wb') as f:
            #将r的内容读入到path的文件中
            f.write(r.content)
        #下载完毕,解锁
        thread_lock.release()
    
    #funtion:主函数
    #label:要爬取的关键字
    def main(label):
        print(label)
        #将关键字传入pages_from_duitang中,获得对应关键字的所有api 赋值给pages
        pages = pages_from_duitang(label)
        #将包含所有的api的pages传入到pic_urls_from_pages中,获得所有的图片地址 赋值给pic_urls
        pic_urls = pic_urls_from_pages(pages)
    
        n = 0
        #遍历所有的图片地址,传入到下载函数中下载图片
        for url in pic_urls:
            #n:待参数1:图片的名称
            n+=1
            print("正在下载第{}张图片".format(n))
            #上锁
            thread_lock.acquire()
            #url:待传入的参数2
            t = threading.Thread(target=download_pics,args=(url,n))
            t.start()
    
    main("帅哥")
    

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    linux下tomcat内存溢出
    leetcode
    HDU 4810 Wall Painting (位操作-异或)
    详解Java中的访问控制修饰符(public, protected, default, private)
    mpvue开发微信小程序之时间+日期选择器
    多行文本溢出隐藏
    swift 多态函数方式
    swift 多态函数方式
    swift 多态函数方式
    swift 多态函数方式
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781616.html
Copyright © 2020-2023  润新知