吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1886|回复: 19
收起左侧

[学习记录] Python多线程,简单高效快捷

  [复制链接]
d221216 发表于 2022-11-27 22:21
本帖最后由 d221216 于 2022-11-29 23:56 编辑

[Python] 纯文本查看 复制代码
import requests
import threading
from bs4 import BeautifulSoup

url_web = "https://www.99tu.com/"

# headers = {
#     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
# }

def download_img(img_src, img_path):
    img_responce = requests.get(img_src)
    img_name = str(img_src).split("/")[-1]
    with open(img_path + img_name, "wb") as f:
        f.write(img_responce.content)
    print(img_src + "下载完成!")


def download():
    responce = requests.get(url_web)
    html = BeautifulSoup(responce.text, "html.parser")
    imgs = html.find_all("img")
    img_path = "D:\\img\\"
    for i in imgs:
        img_src = i.get("src")
        if img_src.__contains__("jpg"):
            # 创建线程
            threading.Thread(target=download_img(img_src, img_path), name=img_src).start()


if __name__ == '__main__':
    download()


2022/11/29 修改
1.感谢大佬的建议,增加线程池控制线程数
下面是修改后的
[Python] 纯文本查看 复制代码
from concurrent.futures import ThreadPoolExecutor
import requests
import threading
from bs4 import BeautifulSoup

url_web = "https://www.99tu.com/"


# headers = {
#     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
# }

def download_img(img_src, img_path):
    img_responce = requests.get(img_src)
    img_name = str(img_src).split("/")[-1]
    with open(img_path + img_name, "wb") as f:
        f.write(img_responce.content)
    print(threading.current_thread().name + "执行下载完成=>" + img_src)


def download():
    responce = requests.get(url_web)
    html = BeautifulSoup(responce.text, "html.parser")
    imgs = html.find_all("img")
    img_path = "D:\\img\\"

    # 定义线程池数量为 设置线程数为5
    with ThreadPoolExecutor(max_workers=5) as pool:

        for i in imgs:
            img_src = i.get("src")
            if img_src.__contains__("jpg"):
                # 提交线程
                pool.submit(download_img, img_src, img_path)


if __name__ == '__main__':
    download()

执行结果

执行结果

执行结果

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
jefflo + 1 谢谢@Thanks!
crownyouyou + 1 + 1 非常感谢,在研究scrapy和selenium

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

caodansheng 发表于 2022-11-27 23:00
最近有兴趣学习下PYTHON     学习了
Vvvvvoid 发表于 2022-11-27 23:23
可以学习下线程池
用池子来控制线程数量, 避免线程数量过载
csgo8542L 发表于 2022-11-27 23:23
sunhan 发表于 2022-11-27 23:39
感谢分享,学习了
hanyouran 发表于 2022-11-28 00:08
非常有帮助
aceronethree 发表于 2022-11-28 00:44
好难呀,还是要看看
zhangfengfeng19 发表于 2022-11-28 08:06
刚刚开始学PYTHON,希望对自己有帮助。
学习了
zkl512008 发表于 2022-11-28 08:08
终于见到找了好久的,感谢!
vicky526356 发表于 2022-11-28 08:23
厉害了大神,学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表