zoukankan      html  css  js  c++  java
  • Python爬取优质高清壁纸网站:彼岸


    基本开发环境

    ·Python 3.6

    ·Pycharm


    模块使用

    网页分析

    1.查看壁纸详情页内容 打开开发者工具就可以看到壁纸的地址以及壁纸的名字了 

    复制壁纸地址

    详情页中的图片地址就是高清图片地址了

    2.获取每张壁纸页的url

    如上图所示,所有的壁纸详情页地址都包含在li标签中。

    综上所述:

    1、请求列表页,解析网页数据获取每张壁纸的详情页url,拼接url地址;

    2、请求详情页,解析网页数据获取每张壁纸的图片url地址以及标题

    3、请求图片url地址,保存壁纸

    保存数据的时候会有一个坑:

    在请求图片url地址的时候们要加上图片cokkie,如果你不加cookie,保存下来的图片是破损的,所以需要两个headers,一个是获取url地址的吗,一个是保存图片数据的。

     

    代码如下:

    import requests
    import threding
    import concurrent.futures
    
    headers = {
        'Cookie': '__cfduid=d06f453df5c4252eb0aac3e9280e5b0b01606983134; Hm_lvt_14b14198b6e26157b7eba06b390ab763=1606983135; xygkqecookieinforecord=%2C12-23053%2C; Hm_lpvt_14b14198b6e26157b7eba06b390ab763=1606984094',
        'Host': 'www.netbian.com',
        'Referer': 'http://www.netbian.com/1920x1080/index.htm',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
    }
    
    headers1 = {
            'Cookie': 'Hm_lvt_14b14198b6e26157b7eba06b390ab763=1590498708; __cfduid=d7b17b08368a78ab8d8d6a42d580c62f01606985472',
            'Host': 'img.netbian.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3823.400 QQBrowser/10.7.4307.400',
    }
    
    
    def get_response(html_url):
        """
        获取网页源代码
        :param html_url: 
        :return: 
        """
        response = requests.get(url=html_url, headers=headers)
        return response
    
    
    def get_response1(html_url):
        """
        获取网页源代码 (保存壁纸)
        :param html_url: 
        :return: 
        """
        response = requests.get(url=html_url, headers=headers1)
        return response
    
    
    def get_parsing(html_data):
        """
        解析函数
        :param html_data: 
        :return: 
        """
        selector = parsel.Selector(html_data)
        return selector
    
    
    def save(img_url, name):
        """
        保存数据
        :param img_url: 
        :param name: 
        :return: 
        """
        filename = 'img\' + name + '.jpg'
        img_content = get_response1(img_url).content
        with open(filename, mode='wb') as f:
            f.write(img_content)
            print('正在保存:', name)
            print(img_url)
    
    
    def get_img_url(page_url):
        """
        获取图片地址 以及 标题
        :param page_url: 
        :return: 
        """
        response = get_response(page_url)
        response.encoding = response.apparent_encoding
        selector = get_parsing(response.text)
        img_url = selector.css('.pic a img::attr(src)').get()
        name = selector.css('.pic a img::attr(title)').get()
        save(img_url, name)
    
    
    def main(url):
        """
        主函数
        :param url: 
        :return: 
        """
        response = get_response(url)
        response.encoding = response.apparent_encoding
        selector = get_parsing(response.text)
        lis = selector.css('.list ul li a::attr(href)').getall()
        lis.pop(2)
        lis.pop(2)
        for li in lis:
            page_url = 'http://www.netbian.com' + li
            get_img_url(page_url)
    
    
    if __name__ == '__main__':
        executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
        for page in range(2, 50):
            url = 'http://www.netbian.com/1920x1080/index_{}.htm'.format(page)
            executor.submit(main, url)
        executor.shutdown()

  • 相关阅读:
    C#基础
    自动化测试
    C# 数据结构题目
    .NET基础知识
    Sharepoint题目
    题目总结2
    数据库索引
    题目总结(2014-1-10)
    Stack详解
    SpringBoot入门基础知识点
  • 原文地址:https://www.cnblogs.com/Martinaoh/p/14302073.html
Copyright © 2011-2022 走看看