专栏首页python-爬虫爬虫多线程高效高速爬取图片

爬虫多线程高效高速爬取图片

6.23 自我总结

爬虫多线程高效高速爬取图片

基于之前的爬取代码我们进行函数的封装并且加入多线程

之前的代码https://www.cnblogs.com/pythonywy/p/11066842.html

from concurrent import futures导入的模块

ex = futures.ThreadPoolExecutor(max_workers =22) #设置线程个数

ex.submit(方法,方法需要传入的参数)

import os
import requests
from lxml.html import etree
from concurrent import futures  #多线程

url = 'http://www.doutula.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',}
def img_url_lis(url):
    response = requests.get(url,headers = headers)
    response.encoding = 'utf8'
    response_html = etree.HTML(response.text)
    img_url_lis = response_html.xpath('.//img/@data-original')
    return img_url_lis


#创建图片文件夹
img_file_path = os.path.join(os.path.dirname(__file__),'img')
if not os.path.exists(img_file_path):  # 没有文件夹名创建文件夹
    os.mkdir(img_file_path)
print(img_file_path)

def dump_one_img(url):
    name = str(url).split('/')[-1]
    response = requests.get(url, headers=headers)
    img_path = os.path.join(img_file_path, name)
    with open(img_path, 'wb') as fw:
        fw.write(response.content)


def dump_imgs(urls:list):
    for url in urls:
        ex = futures.ThreadPoolExecutor(max_workers =22)  #多线程
        ex.submit(dump_one_img,url)   #方法,对象
        # dump_one_img(url)


def run():
    count = 1
    while True:
        if count == 10:
            count += 1
            continue
        lis = img_url_lis(f'http://www.doutula.com/article/list/?page={count}')
        if len(lis) == 0:
            print(count)
            break
        dump_imgs(lis)
        print(f'第{count}页也就完成')
        count +=1

if __name__ == '__main__':
    run()

可以更加快速的爬取多个内容

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL-8.0执行器及其改进

    首先我们介绍一下iterator模型。在编程语言中的iterator模型是一种遍历对象列表常用的数据模型,尤其在数据源大小未知或者数据量过大不适合一次性加载所有...

    腾讯数据库技术
  • SAP ABAP SE16 and SE17

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Jerry Wang
  • 画解算法:15. 三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组...

    灵魂画师牧码
  • 画解算法:219. 存在重复元素 II

    https://leetcode-cn.com/problems/contains-duplicate-ii/

    灵魂画师牧码
  • 画解算法:58. 最后一个单词的长度

    https://leetcode-cn.com/problems/length-of-last-word/

    灵魂画师牧码
  • AQS

    AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面。

    happyJared
  • 画解算法:88. 合并两个有序数组

    https://leetcode-cn.com/problems/merge-sorted-array/

    灵魂画师牧码
  • python之异常处理

    我们在编码或者做产品的时候,不仅要考虑正向的,还要考虑到异常情况下如何处理。人生也是如此,成功的时候要考虑落败时,这样考虑问题就全面,周全。

    赵云龙龙
  • python中的小秘

    最开始也不知道上下文管理器是干什么的,这样翻译过来很难懂。 with有跟从的意思,后面我的理解就是秘书,随从。 他的作用就是鞍前马后跑腿的人。

    赵云龙龙
  • 首届腾讯运维技术开放日!对外报名正式启动!

    ? 服务不停歇,运维不休息。 运维的工作长达7*24 小时,故而每年的 7月24日被视为运维日,代表着运维全天候的保障系统稳定、维护业务正常运行、时刻准备着...

    腾讯技术工程官方号

扫码关注云+社区

领取腾讯云代金券