如何基於執行緒池提公升request模組效率

2022-10-04 14:30:57 字數 2644 閱讀 6143

普通方法:爬取梨**

import re

import time

import random

import requests

f程式設計客棧rom lxml import etree

start_time = time.time()

url = ""

headers =

ex = 'srcurl="(.*?)",vdourl=srcurl'

def request_video(url):

"""向**鏈結傳送請求

"""return requests.get(url=url, headers=headers).content

def s**e_video(content):

"""將**的二進位制資料儲存到本地

"""video_name = str(random.randint(100, 999)) + ".mp4"

with open(video_name, 'wb') as f:

f.write(content)

# 獲取首頁原始碼

page_text = requests.get(url=url, headers=headers).text

tree = etree.html(page程式設計客棧_text)

li_list = tree.xpath('//ul[@class="listvideo-list clearfix"]/li')

video_url_list = list()

for li in li_list:

detail_url = "" + www.cppcns.comli.xpath('./div/a/@href')[0]

# 獲取該**頁面的原始碼

detail_page_text = requests.get(url=detail_url, headers=headers).text

# 正則匹配**的url

video_url = re.findall(ex, detail_page_text, re.s)程式設計客棧[0]

video_url_list.append(video_url)

content = request_video(video_url)

s**e_video(content)

print("執行耗時: ", time.time() - start_time)

執行耗時: 147.22410440444946

使用執行緒池:爬取梨**

# 使用執行緒池爬去梨**的

import re

import time

import random

import requests

from lxml import etree

from multiprocessing.dummy import pool

start_time = time.time()

url = ""

headers =

ex = 'srcurl="(.*?)",vdourl=www.cppcns.comsrcurl'

def request_video(url):

"""向**鏈結傳送請求

"""return requests.get(url=url, headers=headers).content

def s**e_video(content):

"""將**的二進位制資料儲存到本地

"""video_name = str(random.randint(100, 999)) + ".mp4"

with open(video_name, 'wb') as f:

f.write(content)

# 獲取首頁原始碼

page_text = requests.get(url=url, headers=headers).text

tree = etree.html(page_text)

li_list = tree.xpath('//ul[@class="listvideo-list clearfix"]/li')

video_url_list = list()

for li in li_list:

detail_url = "" + li.xpath('./div/a/@href')[0]

# 獲取該**頁面的原始碼

detail_page_text = requests.get(url=detail_url, headers=headers).text

# 正則匹配**的url

video_url = re.findall(ex, detail_page_text, re.s)[0]

video_url_list.append(video_url)

pool = pool(4)

#使用執行緒池將**的二進位制資料**下來

content_list = pool.map(request_video, video_url_list)

# 使用執行緒池將**的二進位制資料儲存到本地

pool.map(s**e_video, content_list)

print("執行耗時: ", time.time() - start_time)

本文標題: 如何基於執行緒池提公升request模組效率

本文位址:

提公升爬蟲效率之執行緒池

一 使用flask模擬阻塞,利用執行緒池爬取資料 模擬flask pip install flask from flask import flask,render template 返回乙個模板檔案需要匯入render tamplate from time import sleep bobo def...

執行緒池如何管理執行緒

本篇介紹一下clr中,執行緒池是如何管理執行緒的。在介紹之前,先說明下執行緒池的設定。一般不建議設定執行緒數,就像從來都不會限制程式使用的記憶體量,或限制使用的網路頻寬。1 預設擁有的執行緒數大約是1000個執行緒。2 32位程序最多能夠有大約1360個執行緒。3 64位程序理論上可以建立千百萬個執...

執行緒池 如何正確的關閉執行緒池

在呼叫這個關閉方法時,執行緒池會根據我們配置的拒絕策略來拒絕掉想要進來的執行緒,也就是說吧建立執行執行緒的入口給關閉掉了,直到執行緒池內的所有執行緒都執行完成。在呼叫這個方法完畢之後,並不代表這個執行緒池就真的都停掉了,只能說他不讓其他執行緒進來了,然後等到執行緒池內的執行緒執行完。shutdown...