python 爬虫 入门 四、线程,进程,协程

目录

一、进程

 特征:

 使用:

初始代码

 进程改装代码

二、线程 

特征:

使用: 

三、协程 

后续:五、抓取图片、视频


        线程和进程大部分人估计都知道,但协程就不一定了。

一、进程

        进程是操作系统分配资源和调度的基本单位,一个程序开始运行时,操作系统会给他分配一块独立的内存空间并分配一个PCB作为唯一标识。初始化内存空间后进程进入就绪态,PCB插入就绪队列。轮到该进程时,操作系统会给进程分配CPU时间片,让进程进入运行态。时间片用完后,重新返回就绪队列,等待下一次分配。如果运行途中,进程遇到了阻塞事件,就会让出CPU给其他就绪进程,自己则进入阻塞队列,待阻塞结束后,重新返回就绪队列。

进程的状态(网图)

 特征:

  • 动态性:进程是程序的一次执行过程,有生命期。
  • 并发性:多个进程实体同存于内存中,能并发执行。
  • 独立性:进程是资源分配的基本单位,拥有独立的内存空间和系统资源。
  • 异步性:进程以各自独立、不可预知的速度向前推进。
  • 结构特性:每个进程由程序段、数据段和一个进程控制块(PCB)三部分组成。

 使用:

        进程用的比较少,线程协程用的多,因为进程之间的切换需要的资源太多了,比较慢,而且因为内存独立而不好通信。

        今天试试这个网站泰坦陨落2steam版新手常见问题解决方法汇总 新手入门指南_逗游网一个游戏攻略,我们要尝试获取每一页红框中的内容,总共9页。

        先来看看数据在不在页面源代码中,使用 Ctrl+U进入页面源代码,再Ctrl+F查找文字内容。发现页面源代码里有,这表明内容非脚本生成的,少了一大截麻烦。

        老样子,通过抓包找到请求,就知道了url和请求方法,根据p不同的取值(1~9)即可切换不同的页面。现在我们可以开始写代码了。

初始代码

         先来个无并行的,只记录请求部分时间。最后结果存在word文档里面。之后只展示控制台输出,word输出没什么差别。

import time
from io import BytesIO

import requests
from bs4 import BeautifulSoup
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Inches, RGBColor


def out_word(bs_datas, out_path):  # 将bs_datas内容保存,out_path为保存文件名
    # 创建Word文档
    doc = Document()
    # 遍历HTML内容
    for bs_data in bs_datas:
        if bs_data is None:
            continue
        for section in bs_data.find_all('p'):
            section_all = section.find_all()  # 获取部分中所有元素
            section_all.insert(0, section)  # 列表第一个插入
            section_text = section_all[-1].string  # 最后一个应该是无嵌套的纯文本
            if section_text is None or section_text.strip() == "":  # 空的看看是不是图片
                if section_all[-1].name == "img":
                    paragraph = doc.add_paragraph()  # 添加一个新的段落
                    run = paragraph.add_run()
                    # 下载图片
                    img_url = section_all[-1]['src']
                    img_response = requests.get(img_url)  # 下载图片
                    img_stream = BytesIO(img_response.content)
                    # 将图片添加到Word文档中
                    run.add_picture(img_stream, Inches(5))  # 调整图片宽度
                else:
                    continue
            else:  # 有文本,写下来
                paragraph = doc.add_paragraph()  # 添加一个新的段落
                run = paragraph.add_run('\t' + section_text.strip())  # 获取标签文本,前面空格
            for part in section_all:  # 遍历每个部分,给段落添加属性
                if part.name == 'strong':  # 粗体
                    run.bold = True  # 设置为粗体
                elif 'align' in part.attrs:  # 有对齐方式,这估计只有图片有个居中对齐,不过都写上吧
                    align = part['align'].upper()
                    if align == 'LEFT':
                        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
                    elif align == 'RIGHT':
                        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
                    elif align == 'CENTER':
                        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
                    elif align == 'JUSTIFY':
                        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY
                    else:
                        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
                elif part.name == 'span' and 'style' in part.attrs:  # 有颜色
                    style = part['style']
                    if style.startswith('color:'):
                        color_str = style.split(':')[1]
                        # 将颜色字符串转换为 RGB 分量
                        r, g, b = int(color_str[1:3], 16), int(color_str[3:5], 16), int(color_str[5:7], 16)
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值