最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中的異步爬蟲詳解

 更新時間:2023年08月09日 10:53:12   作者:南岸青梔*  
這篇文章主要介紹了python中的異步爬蟲詳解,所謂的異步異步?IO,就是發(fā)起一個?IO?阻塞的操作,但是不用等到它結(jié)束,可以在它執(zhí)行?IO?的過程中繼續(xù)做別的事情,當(dāng)?IO?執(zhí)行完畢之后會收到它的通知,需要的朋友可以參考下

python異步爬蟲

基本概念

目的:在爬蟲中使用異步實現(xiàn)高性能的數(shù)據(jù)爬取操作。

異步爬蟲的方式:

  • 多線程,多進(jìn)程(不建議) :
    • 好處:可以為相關(guān)阻塞的操作單獨開啟線程或者進(jìn)程,阻塞操作就可以異步執(zhí)行。
    • 弊端:無法無限制的開啟多線程或者多進(jìn)程。
  • 線程池、 進(jìn)程池(適當(dāng)) :
    • 好處:我們可以降低系統(tǒng)對進(jìn)程或者線程創(chuàng)建和銷毀的一個頻率,從而很好的降低系統(tǒng)的開銷。
    • 弊端:池中線程或進(jìn)程的數(shù)量是有上限。

線程池的基本使用

# import time
# #單線程串行方式執(zhí)行
# start_time = time.time()
# def get_page(str):
#     print('正在下載:',str)
#     time.sleep(2)
#     print('下載完成:',str)
#
# name_list = ['haha','lala','duoduo','anan']
#
# for i in range(len(name_list)):
#     get_page(name_list[i])
#
# end_time = time.time()
# print(end_time-start_time)
import time
from multiprocessing.dummy import Pool
#單線程串行方式執(zhí)行
start_time = time.time()
def get_page(str):
    print('正在下載:',str)
    time.sleep(2)
    print('下載完成:',str)
name_list = ['haha','lala','duoduo','anan']
pool = Pool(4)
pool.map(get_page,name_list)
end_time = time.time()
print(end_time-start_time)

效果圖

單線程串行方式

在這里插入圖片描述

線程池

在這里插入圖片描述

爬取網(wǎng)址:https://www.pearvideo.com/category_6

代碼

import requests,re,random
from lxml import etree
from multiprocessing.dummy import Pool
urls = [] #視頻地址和視頻名稱的字典
#獲取視頻假地址函數(shù)
def get_videoadd(detail_url,video_id):
    ajks_url = 'https://www.pearvideo.com/videoStatus.jsp'
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
                      'Referer':detail_url
    }
    params = {
        'contId': video_id,
        'mrd': str(random.random())
    }
    video_json = requests.post(headers=header,url=ajks_url,params=params).json()
    return video_json['videoInfo']['videos']['srcUrl']
#獲取視頻數(shù)據(jù)和持久化存儲
def get_videoData(dic):
    right_url = dic['url']
    print(dic['name'],'start!')
    video_data = requests.get(url=right_url,headers=headers).content
    with open(dic['name'],'wb') as fp:
        fp.write(video_data)
    print(dic['name'],'over!')
if __name__ == '__main__':
    url = 'https://www.梨video.com/category_6'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    }
    page_text = requests.get(url=url,headers=headers).text
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//*[@id="listvideoListUl"]/li')
    for li in li_list:
        detail_url = 'https://www.pearvideo.com/'+li.xpath('./div/a/@href')[0]
        name = li.xpath('./div/a/div[2]/text()')[0]+'.mp4'
        #解析視頻ID
        video_id = detail_url.split('/')[-1].split('_')[-1]
        false_url = get_videoadd(detail_url,video_id)
        temp = false_url.split('/')[-1].split('-')[0]
        #拼接出正確的url
        right_url = false_url.replace(temp,'cont-'+str(video_id))
        dic = {
            'name':name,
            'url':right_url
        }
        urls.append(dic)
    #使用線程池
    pool = Pool(4)
    pool.map(get_videoData,urls)
    #子線程結(jié)束后關(guān)閉
    pool.close()
    #主線程關(guān)閉
    pool.join()

效果圖

在這里插入圖片描述

思路

1.詳情頁發(fā)現(xiàn)ajks請求

在這里插入圖片描述

2.但是,這是假地址 例: 假地址:

https://video.pearvideo.com/mp4/adshort/20210323/1616511268090-15637590_adpkg-ad_hd.mp4

3.真地址

https://video.pearvideo.com/mp4/adshort/20210323/cont-1724179-15637590_adpkg-ad_hd.mp4

對比之后發(fā)現(xiàn)

在這里插入圖片描述

圈中的數(shù)字中換為cont-video_id就為真地址

到此這篇關(guān)于python中的異步爬蟲詳解的文章就介紹到這了,更多相關(guān)python異步爬蟲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何調(diào)用spire.doc輕松讀取Word文檔內(nèi)容

    Python如何調(diào)用spire.doc輕松讀取Word文檔內(nèi)容

    Spire.Doc?for?.NET?是一款專門對?Word?文檔進(jìn)行操作的?.NET?類庫,本文為大家介紹了Python如何調(diào)用spire.doc實現(xiàn)輕松讀取Word文檔內(nèi)容,需要的可以了解下
    2025-02-02
  • python xlsxwriter模塊的使用

    python xlsxwriter模塊的使用

    這篇文章主要介紹了python xlsxwriter模塊的使用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python正則表達(dá)式教程之三:貪婪/非貪婪特性

    Python正則表達(dá)式教程之三:貪婪/非貪婪特性

    這篇文章主要介紹了Python正則表達(dá)式中貪婪/非貪婪特性的相關(guān)資料,文中通過示例代碼介紹的很詳細(xì),對大家具有一定的參考價值,需要的朋友下面來一起看看吧。
    2017-03-03
  • python下grpc與protobuf的編寫使用示例

    python下grpc與protobuf的編寫使用示例

    這篇文章主要為大家介紹了python下grpc與protobuf的編寫使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • python批量爬取圖片的方法詳解

    python批量爬取圖片的方法詳解

    這篇文章給大家介紹了如何使用python批量爬取圖片,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • Python代碼執(zhí)行時間測量模塊timeit用法解析

    Python代碼執(zhí)行時間測量模塊timeit用法解析

    這篇文章主要介紹了Python代碼執(zhí)行時間測量模塊timeit用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Python進(jìn)行項目打包的完整流程

    Python進(jìn)行項目打包的完整流程

    在 Python 開發(fā)日常工作中,直接傳輸源碼文件共享項目,這種方式不僅雜亂無章,還難以管理版本、依賴和更新,借助 Python 官方內(nèi)置的setuptools工具,就能快速將普通腳本、項目模塊打包成標(biāo)準(zhǔn)可安裝包,本文通過代碼示例給大家詳細(xì)介紹了Python項目打包的完整流程
    2026-05-05
  • python如何通過pyarmor庫保護(hù)源代碼

    python如何通過pyarmor庫保護(hù)源代碼

    pyarmor是一款用于加密和保護(hù)python腳本的工具,可以用于防止源代碼泄露,下面我們就來學(xué)習(xí)一下Python如何利用pyarmor庫來保護(hù)源代碼吧
    2024-11-11
  • Pytorch中膨脹卷積的用法詳解

    Pytorch中膨脹卷積的用法詳解

    今天小編就為大家分享一篇Pytorch中膨脹卷積的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python fileinput模塊使用介紹

    Python fileinput模塊使用介紹

    這篇文章主要介紹了Python fileinput模塊使用方法,需要的朋友可以參考下
    2014-11-11

最新評論

隆林| 五河县| 郴州市| 安溪县| 娄烦县| 芜湖市| 嘉禾县| 涟源市| 浪卡子县| 湖口县| 津南区| 宝山区| 虹口区| 光泽县| 平果县| 彭阳县| 遵义县| 米泉市| 桓仁| 拉萨市| 云浮市| 安乡县| 磐安县| 清水河县| 井陉县| 萨迦县| 九龙坡区| 县级市| 长垣县| 临猗县| 福泉市| 宁乡县| 邢台市| 桑植县| 阳泉市| 旺苍县| 买车| 通许县| 措勤县| 沙洋县| 白银市|