如何基于線程池提升request模塊效率
普通方法:爬取梨視頻
import re
import time
import random
import requests
from lxml import etree
start_time = time.time()
url = "https://www.pearvideo.com/category_3"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}
ex = 'srcUrl="(.*?)",vdoUrl=srcUrl'
def request_video(url):
"""
向視頻鏈接發(fā)送請(qǐng)求
"""
return requests.get(url=url, headers=headers).content
def save_video(content):
"""
將視頻的二進(jìn)制數(shù)據(jù)保存到本地
"""
video_name = str(random.randint(100, 999)) + ".mp4"
with open(video_name, 'wb') as f:
f.write(content)
# 獲取首頁(yè)源碼
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 = "https://www.pearvideo.com/" + li.xpath('./div/a/@href')[0]
# 獲取該視頻頁(yè)面的源碼
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)
save_video(content)
print("執(zhí)行耗時(shí): ", time.time() - start_time)
執(zhí)行耗時(shí): 147.22410440444946
使用線程池:爬取梨視頻
# 使用線程池爬去梨視頻的
import re
import time
import random
import requests
from lxml import etree
from multiprocessing.dummy import Pool
start_time = time.time()
url = "https://www.pearvideo.com/category_3"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}
ex = 'srcUrl="(.*?)",vdoUrl=srcUrl'
def request_video(url):
"""
向視頻鏈接發(fā)送請(qǐng)求
"""
return requests.get(url=url, headers=headers).content
def save_video(content):
"""
將視頻的二進(jìn)制數(shù)據(jù)保存到本地
"""
video_name = str(random.randint(100, 999)) + ".mp4"
with open(video_name, 'wb') as f:
f.write(content)
# 獲取首頁(yè)源碼
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 = "https://www.pearvideo.com/" + li.xpath('./div/a/@href')[0]
# 獲取該視頻頁(yè)面的源碼
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)
#使用線程池將視頻的二進(jìn)制數(shù)據(jù)下載下來(lái)
content_list = pool.map(request_video, video_url_list)
# 使用線程池將視頻的二進(jìn)制數(shù)據(jù)保存到本地
pool.map(save_video, content_list)
print("執(zhí)行耗時(shí): ", time.time() - start_time)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python requests模塊cookie實(shí)例解析
- python爬蟲開發(fā)之Request模塊從安裝到詳細(xì)使用方法與實(shí)例全解
- Python requests模塊基礎(chǔ)使用方法實(shí)例及高級(jí)應(yīng)用(自動(dòng)登陸,抓取網(wǎng)頁(yè)源碼)實(shí)例詳解
- Python3離線安裝Requests模塊問題
- Python3使用requests模塊實(shí)現(xiàn)顯示下載進(jìn)度的方法詳解
- Python3爬蟲爬取百姓網(wǎng)列表并保存為json功能示例【基于request、lxml和json模塊】
- Node.js 使用request模塊下載文件的實(shí)例
相關(guān)文章
簡(jiǎn)單介紹Python中的filter和lambda函數(shù)的使用
這篇文章主要簡(jiǎn)單介紹了Python中的filter和lambda函數(shù)的使用,是Python學(xué)習(xí)中的基礎(chǔ),同時(shí)lambda匿名函數(shù)的使用也是經(jīng)常被用來(lái)對(duì)比各種編程語(yǔ)的重要特性,言需要的朋友可以參考下2015-04-04
python實(shí)現(xiàn)多線程的方式及多條命令并發(fā)執(zhí)行
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)多線程的方式及多條命令并發(fā)執(zhí)行,感興趣的小伙伴們可以參考一下2016-06-06
python 數(shù)據(jù)的清理行為實(shí)例詳解
這篇文章主要介紹了python 數(shù)據(jù)的清理行為實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07
Python自然語(yǔ)言處理使用spaCy庫(kù)進(jìn)行文本預(yù)處理
這篇文章主要為大家介紹了Python自然語(yǔ)言處理使用spaCy庫(kù)進(jìn)行文本預(yù)處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
如何解決django-celery啟動(dòng)后迅速關(guān)閉
在本篇文章里小編給大家整理的是關(guān)于django-celery啟動(dòng)后迅速關(guān)閉的解決方法,有需要的朋友們學(xué)習(xí)下。2019-10-10
Python中sort函數(shù)正則表達(dá)式的使用
在python中,sort是列表排序的一種方法,本文就來(lái)介紹一下sort函數(shù)正則表達(dá)式的使用以及與sorted的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Python入門之三角函數(shù)atan2()函數(shù)詳解
這篇文章主要介紹了Python入門之三角函數(shù)atan2()函數(shù)詳解,分享了其實(shí)例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11

