首页 > 编程语言 >Python爬虫(爬取博客网为例)

Python爬虫(爬取博客网为例)

时间:2024-11-19 09:44:48浏览次数:3  
标签:thread Python 爬取 start 网为例 线程 url time print

一、前言

场景1:一个网络爬虫,顺序爬取一个网页花了一个小时,采用并发下载就减少到了20分钟。

场景2:一个应用软件优化前每次打开网页需要3秒,采用异步并发提升到了200毫秒。

假设一个工程的工作量为100,不采用并发编程就相当于由一个人去完成这个工作量为100的所有工作内容,可能需要1个小时来做完。

但是还是这工作量为100的工程,我们采用并发编程就相当于是由2个人或者3个人去共同完成这份100工作量的工作,可能这份工作只需要半个小时就能做完。

总之引入并发就相当于提升程序进行速度。

二、Python多线程的使用

1.Python创建简单多线程的方法

import threading
import time

# 定义两个线程要执行的函数
def print_hello():
    for _ in range(10):
        print("Hello")
        time.sleep(0.1)  # 添加微小的延迟以确保线程交替

def print_world():
    for _ in range(10):
        print("World")
        time.sleep(0.1)  # 添加微小的延迟以确保线程交替

# 创建线程对象
thread_hello = threading.Thread(target=print_hello)
thread_world = threading.Thread(target=print_world)

# 启动线程
thread_hello.start()
thread_world.start()

# 等待线程执行完毕
thread_hello.join()
thread_world.join()

总结:

  1. 准备一个函数。
  2. 使用 import threading 创建一个线程对象 t 。
  3. 使用 t.start() 来启动线程。
  4. 使用 t.join() 来等待线程的结束。

2 改写爬虫程序,变成多线程爬取博客网

import threading
import time
import requests

urls = [f"https://www.cnblogs.com/#p{page}" for page in range(1, 50+1)]

def craw(url):
    r = requests.get(url)
    print(url, len(r.text))

craw(urls[0])

# 运行结果是:
# https://www.cnblogs.com/#p1 72285
# 可以看到爬取了第一页内容的长度是72285个,这是我们的爬虫函数。

单线程

def single_thread():
    """
    单线程函数
    :return:
    """
    print("single_thread begin")
    for url in urls:
        craw(url)
    print("single_thread end")

多线程函数

def multi_thread():
    """
    多进程函数
    :return:
    """
    print("multi_thread begin")
    threads = []

    for url in urls:
        threads.append(threading.Thread(target=craw, args=(url,)))

    for thread in threads:
        thread.start()

    for thread in threads:
        thread.join()

    print("multi_thread end")

单线程和多线程的速度对比

if __name__ == '__main__':
    start = time.time()
    single_thread()
    end = time.time()
    print(f"单线程需要时间{end-start}seconds")

    start = time.time()
    multi_thread()
    end = time.time()
    print(f"多线程需要时间{end - start}seconds")

标签:thread,Python,爬取,start,网为例,线程,url,time,print
From: https://blog.csdn.net/qq_69220879/article/details/143865386

相关文章

  • Python中的平方功能:方便实用的数据处理利器
    Python作为一门广泛应用于数据科学、机器学习和人工智能领域的编程语言,具有许多实用的功能。其中,Python中的平方功能是一个非常有用和实用的数据处理利器。简洁易用的语法Python中的平方功能使用的是**运算符,其语法为**数**,其中数可以是任意实数、整数或字符串。例如,要计......
  • Python用subprocess管理子进程在Windows平台实现平行效果
    在Python中,使用subprocess模块管理子进程时,如果你在Windows平台上尝试实现类似于Unix系统的“平行效果”(即父子进程可以同时运行),你可能会遇到一些问题。在Unix系统中,子进程是独立于父进程的,它们可以同时运行。但在Windows系统中,当你使用subprocess创建子进程时,默认情况下会存在父......
  • 《Python从入门到实践》第四章动手试一试
    4-1比萨:想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用for循环将每种比萨的名称都打印出来。修改这个for循环,使其打印包含比萨名称的句子,而不仅仅是比萨的名称。对于每种比萨,都显示一行输出,如“Ilikepepperonipizza”。在程序末尾添加一行代码,它不在for循环中,指......
  • Python设计模式详解之1 —— 单例模式
    单例模式(SingletonPattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点。单例模式适用于需要确保全局唯一实例的场景,例如配置管理、日志记录器、数据库连接等。1.单例模式的特点全局唯一性:在整个应用程序的生命周期内,单例类只能有一个实例。全局访问:......
  • Python设计模式详解之2 —— 工厂模式
    工厂模式(FactoryPattern)是一种创建型设计模式,旨在定义一个用于创建对象的接口,但由子类决定实例化哪个类。工厂模式可以帮助我们将对象的创建与其使用分离,增强代码的可扩展性和维护性。工厂模式的分类简单工厂模式(SimpleFactoryPattern)工厂方法模式(FactoryMethodPatte......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    摘 要为了方便用户快速定位自己感兴趣的国内热门旅游景点信息,国内热门景点推荐系统应运而生。本系统的前端界面主要实现页面的美观和动态效果使之符合广大群众的审美观,后台主要使用的技术主要有Java编程语言,SSM框架,MySQL数据库的旅游推荐系统解决了传统旅游推荐方式中数据......
  • Python设计模式详解之3 —— 抽象工厂模式
    抽象工厂模式也是一种创建型设计模式,它提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。它特别适合在需要创建多个相关对象且这些对象在逻辑上属于一个“产品族”时使用。结构:抽象产品:定义了产品家族中每个产品的接口。具体产品:实现抽象产品接口......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认知向理性认知提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对医疗门诊管理......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园跳蚤市场管理系统被用户普遍使用,为方便用户能够可以随时进行校园跳蚤市场管理系统的数据信息管理,特开发了基于spri......
  • AI豆包-Python SDK接入流程(完整代码)
    在当今的软件开发领域,与各类人工智能模型进行交互以获取智能回复是一项常见且重要的任务。本文将聚焦于一个名为 doubao 的Python函数,详细剖析它是如何与特定的人工智能模型进行连接并获取回复的,为大家揭示其背后的技术细节。Python实现AI豆包智能回复微信运行结果:第......