百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

多线程与多进程爬取数据(多线程python爬虫)

citgpt 2024-09-09 02:17 15 浏览 0 评论

爬取的网站为:https://materialsweb.org/

代码:

多线程与多进程爬取数据(多线程python爬虫)

#导入相关库
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
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
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是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: