zoukankan      html  css  js  c++  java
  • 爬虫实战项目一:对彼岸图网4K图片爬取

    地址:彼岸图网

    第一、同步爬取第一页的图片并进行存储

    代码分析:缺点:请求和数据持久化全部都是同步,耗费大量时间,如下:

    仅仅只爬取了20张图片,就花费了35秒多时间,如果想实现分页爬取,不久gogo了。

    同步爬取第一页图片并存储

    第二、异步非阻塞方式爬取第一页的图片并进行存储

    和同步相比是非常快的。引入新的第三方库:aiohttp

    Python3.4引入的一个标准库,直接内置了对异步IO的支持。asyncio模块提供了使用协程构建并发应用的工具。

    此处就不做具体详解了。

    import aiohttp
    import requests
    from lxml import etree
    import time
    import asyncio
    
    headers = {
        'User-Agent': "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Mobile Safari/537.36",
    }
    
    # 定义异步函数
    async def get_img(img_name, img_detail_url):
        res = requests.get(img_detail_url, headers).text
        img_url = 'http://pic.netbian.com/' + etree.HTML(res).xpath('//div[@class="photo-pic"]/a/img/@src')[0]
        path = 'D:\imgs\netbian_async\' + img_name + img_url[-4::]
    
        # 异步发起请求,并保存数据
        async with aiohttp.ClientSession() as session:
            async with await session.get(url=img_url, headers=headers) as response:
                img_data = await response.read()
                with open(path, "wb") as fp:
                    fp.write(img_data)
                    print(f"{img_name}, 下载成功!!!")
    
    
    if __name__ == "__main__":
        # 1.发起请求
        url = 'http://pic.netbian.com/4kdongman/'
        response = requests.get(url, headers=headers)
        response.encoding = 'gbk'
        html = etree.HTML(response.text)
        img_li = html.xpath('//ul[@class="clearfix"]/li')
        start_time = time.time()
        async_list = []
        for li in img_li:
            img_name = li.xpath('./a/b/text()')[0]
            img_detail_url = 'http://pic.netbian.com' + li.xpath('./a/@href')[0]
            print(img_name + "--" + img_detail_url)
            # 异步对象放入列表
            async_list.append(get_img(img_name, img_detail_url))
        asyncio.run(asyncio.wait(async_list))
        end_time = time.time()
        print(end_time-start_time)
    异步爬取第一页图片并存储

    第三、异步非阻塞方式分页爬取图片并进行存储

     后面补充

  • 相关阅读:
    iOS开发之Quartz2D 二:绘制直线,曲线,圆弧,矩形,椭圆,圆
    统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)
    Android protectionLevel
    nmon for linux
    UFT 小技巧
    adb测试使用相关
    Java 反射
    Android USB安全调试
    android.process.acore和system进程
    Android 屏幕截图
  • 原文地址:https://www.cnblogs.com/854594834-YT/p/13929607.html
Copyright © 2011-2022 走看看