多线程与多进程爬取数据(多线程python爬虫)
citgpt 2024-09-09 02:17 15 浏览 0 评论
爬取的网站为:https://materialsweb.org/
代码:
#导入相关库
import os
import numpy as np
import urllib
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup
import time
from multiprocessing.pool import ThreadPool
from multiprocessing import Pool as ProcessPool
from urllib.request import urlretrieve
#获取要下载的url,存入urls。
urls=
for i in range(1,781):
url="https://materialsweb.org/static/inputs/mw-"+str(i)+"_POSCAR"
urls.append(url)
#undownloaded存储未被下载的链接,可后面下再次尝试下载。
undownloaded=
def download(url):
#下载url文件,如出现异常,输出“Not Found”。
try:
urlretrieve(url, url[39:])
except:
print('Not Found')
undownloaded.append(url)
def thread_pool(num):
#初始化线程池p,参数num为欲采用的线程数。
p = ThreadPool(num)
start_time = time.time
#p.map的第一个参数为函数名,第二个参数为存储函数对应的参数,应可迭代。
ret = p.map(download, urls)
p.close
p.join
print("thread_pool %d, costTime: %fs ret.size: %d" % (num, (time.time - start_time), len(ret)))
def process_pool(num):
#初始化进程池p,参数num为欲采用的进程数。
p = ProcessPool(num)
start_time = time.time
#p.map的第一个参数为函数名,第二个参数为存储函数对应的参数,应可迭代。 ret = p.map(download, urls)
p.close
p.join
print("process_pool %d, costTime: %fs ret.size: %d" % (num, (time.time - start_time), len(ret)))
if __name__ == "__main__":
#分别采用4,5,6,7,8个进程和线程进行爬取,可以比较结果,看谁最快。
for i in range(4, 9):
thread_pool(i)
process_pool(i)
print("=====")
略去"Not FOund", 运行结果如下:
thread_pool 4, costTime: 311.579127s ret.size: 780
process_pool 4, costTime: 340.535949s ret.size: 780
thread_pool 5, costTime: 251.317034s ret.size: 780
process_pool 5, costTime: 481.923806s ret.size: 780
thread_pool 6, costTime: 259.729788s ret.size: 780
process_pool 6, costTime: 214.018717s ret.size: 780
thread_pool 7, costTime: 187.721970s ret.size: 780
process_pool 7, costTime: 184.847098s ret.size: 780
thread_pool 8, costTime: 162.505511s ret.size: 780
process_pool 8, costTime: 190.380221s ret.size: 780
相关推荐
- js中arguments详解
-
一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...
- firewall-cmd 常用命令
-
目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...
- epel-release 是什么
-
EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...
- FullGC详解 什么是 JVM 的 GC
-
前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...
-
2024-10-26 08:50 citgpt
- 跨域(CrossOrigin)
-
1.介绍 1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。 通俗讲...
- 微服务架构和分布式架构的区别
-
1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...
- 深入理解与应用CSS clip-path 属性
-
clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...
-
2024-10-25 11:51 citgpt
- Request.ServerVariables 大全
-
Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...
- python操作Kafka
-
目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...
- Runtime.getRuntime().exec详解
-
Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...
- promise.all详解 promise.all是干什么的
-
promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...
-
2024-10-24 16:21 citgpt
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracleclient (56)
- springbatch (59)
- oracle恢复数据 (56)
- 简单工厂模式 (68)
- 函数指针 (72)
- fill_parent (135)
- java配置环境变量 (140)
- linux文件系统 (56)
- 计算机操作系统教程 (60)
- 静态ip (63)
- notifyicon (55)
- 线程同步 (58)
- xcode 4 5 (60)
- 调试器 (60)
- c0000005 (63)
- html代码大全 (61)
- header utf 8 (61)
- 多线程多进程 (65)
- require_once (60)
- 百度网盘下载速度慢破解方法 (72)
- 谷歌浏览器免费入口 (72)
- npm list (64)
- 网站打开速度检测 (59)
- 网站建设流程图 (58)
- this关键字 (67)