普通方法:爬取梨**
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...