爬虫day3

ops/2024/10/11 13:19:39/

爬虫如何提高效率?

我们可以选择多线程,多进程,协程等操作完成异步爬取。

异步:把一个变成多个

线程:执行单位

进程:资源单位,每一个进程至少有一个线程

if __name__ == '__main__':

       print("nihao")

相当于一个线程。

多线程

可以看到打印的是有两个,

mainfunc 921958

一个线程只打印一对,加入了一个线程后打印两对,有两个线程在工作。

原理:使用Thread库

第二个使用class类去继承

from threading import Threadclass MyThread(Thread):def run(self):for i in range(1000):print("子线程", i)if __name__ == '__main__':t = MyThread()t.start()for i in range(1000):print("主线程", i)

 运行结果:

可以看到混在一起了,完成了多线程的操作。

多进程

使用class一样。

线程池和进程池

线程池:一次性开辟一些线程,我们用户直接给线程池提交任务。线程任务的调度交给线程池来完成。

#线程池:一次性开一些线程,我们用户直接给线程池子提交任务,线程任务的调度交给线程池来完成
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
def fn(name):for i in range(1000):print(name,i)if __name__ == '__main__':
# 创建线程池with ThreadPoolExecutor(50) as t:for i in range(100):t.submit(fn, name=f"线程{i}")#等待线程池中的任务全部执行完毕,才继续执行(守护)print("123")

输出:

进程池

实战

1. 如何提取单个页面的内容。

2 .上线程池,多个页面同时抓取。

import requests
from lxml import etree
import csv
from concurrent.futures import ThreadPoolExecutorf = open("da.csv", mode="w", encoding='utf-8')
csvwriter = csv.writer(f)def download_one_page(url):resp = requests.get(url)# print(resp.text)html = etree.HTML(resp.text)table = html.xpath("/html/body/div[2]/div[4]/div[1]/table")[0]trs = table.xpath("./tr[position()>1]")# 拿到每个strfor tr in trs:txt = tr.xpath("./td/text()")txt = (item.replace("\\", "").replace("/", "") for item in txt)# 把数据存储到文件中csvwriter.writerow(txt)print(url, "提取完毕!")if __name__ == '__main__':# for i in range(1, 14870):# download_one_page(f"http://www.xinfadi.com.cn/marketanalysis/0/list/{i}.shtml")with ThreadPoolExecutor(50) as t:for i in range(1, 200):t.submit(download_one_page, f"http://www.xinfadi.com.cn/marketanalysis/0/list/{i}.shtml")print("全部下载完毕!")

 但是现在这个网址的话访问不了了,这个网址把数据改成客户端渲染了,在源代码是没有数据的,而且是通过post提交来改变页数,只要能够爬取一页数据,就可以多线程来爬取。


http://www.ppmy.cn/ops/53286.html

相关文章

【资源调度】1-何为调度?

导读:本期是全网最全【资源调度】系列推文的第1期(共50期左右)。我们将对调度的定义与作用、计划与调度的关系、调度问题的拆解做出详细介绍,使大家对【资源调度】问题有了一个整体的认识,为后续的内容奠定基础。 作者1:张哲铭&am…

【金】04Y? 人脸识别系统 | 前端PyQT

参考-教程bilibil视频:树莓派进阶玩法 | 人脸识别项目教程 界面参考:基于深度学习的人脸识别与管理系统(UI界面增强版,Python代码)_python管理系统深度学习-CSDN博客 1、 树莓派小项目:人脸识别&#xff…

第1章_搭建开发环境

文章目录 第1章 搭建开发环境1.1开发套件硬件接口资源介绍1.2资料下载1.3安装Keil MDK1.3.1**软件下载**1.3.2**软件安装**1.3.3 PACK 安装 1.4 安装 STM32CubeMX1.5 安装 STM32CubeProgrammer1.6 安装 ST-Link 驱动1.7 安装 CH340 驱动 第1章 搭建开发环境 1.1开发套件硬件接…

大模型ReAct:思考与工具协同完成复杂任务推理

ReAct: Synergizing Reasoning and Acting in Language Models Github:https://github.com/ysymyth/ReAct 一、动机 人类的认知通常具备一定的自我调节(self-regulation)和策略制定(strategization)的能力&#xff0…

使用 shell 脚本 统计app冷启动耗时

下面是一个 shell 脚本,它使用 参数将包名称作为参数--app,识别相应应用程序进程的 PID,使用 终止该进程adb shell kill,最后使用 重新启动该应用程序adb shell am start: #!/bin/bash# Check if package name is pro…

量子计算对2024年网络安全的冲击与应对

《量子计算对2024年网络安全的冲击与应对》 引言 量子计算以其惊人的计算能力,被誉为信息技术的下一个革命。然而,这种强大的计算力也给现有的网络安全体系带来了前所未有的冲击。本文将深入探讨量子计算对2024年网络安全的影响,并提出相应…

四、golang基础之defer

文章目录 一、定义二、作用三、结果四、recover错误拦截 一、定义 defer语句被用于预定对一个函数的调用。可以把这类被defer语句调用的函数称为延迟函数。 二、作用 释放占用的资源捕捉处理异常输出日志 三、结果 如果一个函数中有多个defer语句,它们会以LIFO…

气膜游泳馆造价多少钱—轻空间

随着人们对健康生活的追求和休闲娱乐需求的增加,游泳馆逐渐成为城市建设中的重要设施之一。气膜游泳馆作为一种新型建筑形式,凭借其快速施工、节能环保、经济实用等优点,受到广泛关注和应用。轻空间将详细探讨气膜游泳馆的造价构成及其影响因…