欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中的異步爬蟲詳解

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

python異步爬蟲

基本概念

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

異步爬蟲的方式:

  • 多線程,多進程(不建議) :
    • 好處:可以為相關阻塞的操作單獨開啟線程或者進程,阻塞操作就可以異步執(zhí)行。
    • 弊端:無法無限制的開啟多線程或者多進程。
  • 線程池、 進程池(適當) :
    • 好處:我們可以降低系統(tǒng)對進程或者線程創(chuàng)建和銷毀的一個頻率,從而很好的降低系統(tǒng)的開銷。
    • 弊端:池中線程或進程的數(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é)束后關閉
    pool.close()
    #主線程關閉
    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就為真地址

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

相關文章

  • Python OpenCV中的resize()函數(shù)的使用

    Python OpenCV中的resize()函數(shù)的使用

    這篇文章主要介紹了Python OpenCV中的resize()函數(shù)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • python中的pyc文件是什么

    python中的pyc文件是什么

    這篇文章主要介紹了python中的pyc文件是什么,pyc文件是Python編譯過的字節(jié)碼文件,這個字節(jié)碼是一種低級的、與平臺無關的代碼,還不知道的朋友來了解一下吧
    2023-04-04
  • tensorflow 實現(xiàn)打印pb模型的所有節(jié)點

    tensorflow 實現(xiàn)打印pb模型的所有節(jié)點

    今天小編就為大家分享一篇tensorflow 實現(xiàn)打印pb模型的所有節(jié)點,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 解決PyCharm無法使用lxml庫的問題(圖解)

    解決PyCharm無法使用lxml庫的問題(圖解)

    這篇文章主要介紹了解決PyCharm無法使用lxml庫的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 使用Python的數(shù)據(jù)可視化庫Matplotlib實現(xiàn)折線圖

    使用Python的數(shù)據(jù)可視化庫Matplotlib實現(xiàn)折線圖

    數(shù)據(jù)可視化是數(shù)據(jù)分析和探索中不可或缺的一環(huán),本文將介紹如何使用Python中的數(shù)據(jù)可視化庫Matplotlib,通過示例代碼實現(xiàn)一個簡單的折線圖,感興趣的同學可以參考閱讀下
    2023-07-07
  • python能做哪些生活有趣的事情

    python能做哪些生活有趣的事情

    在本篇文章里小編給各位分享了關于python能做的生活有趣的事情,有興趣的朋友們可以學習下。
    2020-09-09
  • Pandas數(shù)據(jù)分析之pandas文本處理

    Pandas數(shù)據(jù)分析之pandas文本處理

    這篇文章主要介紹了Pandas數(shù)據(jù)分析之pandas文本處理,pandas對文本數(shù)據(jù)也有很多便捷處理方法,可以不用寫循環(huán),向量化操作運算速度快,還可以進行高級的正則表達式,各種復雜的邏輯篩選和匹配提取信息
    2022-08-08
  • 利用Anaconda簡單安裝scrapy框架的方法

    利用Anaconda簡單安裝scrapy框架的方法

    今天小編就為大家分享一篇利用Anaconda簡單安裝scrapy框架的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python使用SimpleXMLRPCServer實現(xiàn)簡單的rpc過程

    python使用SimpleXMLRPCServer實現(xiàn)簡單的rpc過程

    這篇文章主要介紹了python使用SimpleXMLRPCServer實現(xiàn)簡單的rpc過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 全面掌握Python?JSON庫函數(shù)與方法學會JSON數(shù)據(jù)處理

    全面掌握Python?JSON庫函數(shù)與方法學會JSON數(shù)據(jù)處理

    Python提供了內(nèi)置的JSON庫,允許在Python中解析和序列化JSON數(shù)據(jù),本文將深入研究Python中JSON庫的各種函數(shù)和方法,為你提供豐富的示例代碼來幫助掌握JSON處理的方方面面
    2024-01-01

最新評論