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

python異步爬蟲之多線程

 更新時間:2022年02月10日 08:54:43   作者:阿南-anan?  
這篇文章主要介紹了python異步爬蟲之多線程,多線程可以為相關(guān)阻塞的操作單獨開啟線程或者進(jìn)程,阻塞操作可以異步執(zhí)行,但是無法無限制開啟多線程或多進(jìn)程,下面我們一起學(xué)習(xí)詳細(xì)內(nèi)容,需要的朋友可以參考一下

多線程,多進(jìn)程(不建議使用)
優(yōu)點:可以為相關(guān)阻塞的操作單獨開啟線程或者進(jìn)程,阻塞操作可以異步執(zhí)行
弊端:無法無限制開啟多線程或多進(jìn)程。
原則:線程池處理的是阻塞且耗時的操作

單線爬蟲示例:

import time

def get_page(str):
? ? print("正在下載:",str)
? ? time.sleep(2)
? ? print('下載成功:',str)

name_list = ['aa','bb','cc','dd']

start_time = time.time()

for i in range(len(name_list)):
? ? get_page(name_list[i])
end_time = time.time()
print('%d second'% (end_time-start_time))

多線程爬蟲示例:

import time
# 導(dǎo)入線程池模塊對應(yīng)的類
from multiprocessing.dummy import Pool

start_time = time.time()
def get_page(str):
? ? print("正在下載:",str)
? ? time.sleep(2)
? ? print('下載成功:',str)

name_list = ['aa','bb','cc','dd']

# 實例化一個線程池對象
pool = Pool(4)
# 將列表中每一個列表元素傳遞給get_page進(jìn)行處理
pool.map(get_page,name_list)

end_time = time.time()
print(end_time-start_time)

案例:

# 多線爬蟲示例
import requests
from lxml import etree
import re
from multiprocessing.dummy import Pool

headers = {
? ? 'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0',
? ? 'Content-type':'application/json',
}
# 對下述url發(fā)起請求解析出視頻詳情頁的url和視頻的名稱
url = "https://pearvideo.com/category_5"
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="listvideoListUl"]/li')
urls = [] #存儲所有視頻的鏈接
for li in li_list:
? ? detail_url = 'https://pearvideo.com/' + li.xpath('./div/a/@href')[0]
? ? name = li.xpath('./div/a/div[2]/text()')[0]+'.mp4'
? ? # 對詳情頁的url發(fā)起請求
? ? detail_page_text = requests.get(url=detail_url,headers=headers).text
? ? # print(detail_url,name)
? ? # 從詳情頁中解析出視頻的地址(url)
? ? id = re.findall(r'\d+', detail_url)[0]
# ? ? https://pearvideo.com/videoStatus.jsp?contId=1751458&mrd=0.32392817067398805
? ? detail_vedio_url = 'https://pearvideo.com/videoStatus.jsp?contId='+id

? ? header1s = {
? ? ? ? 'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0',
? ? ? ? 'Content-type': 'application/json',
? ? ? ? 'referer':detail_url
? ? }
? ? vedio_text = requests.get(url=detail_vedio_url,headers=header1s).json()
? ? # print(vedio_text)
? ? vedio_url = vedio_text['videoInfo']['videos']['srcUrl']
? ? dic = {
? ? ? ? 'name': name,
? ? ? ? 'url': vedio_url
? ? }
? ? urls.append(dic)
? ? print(vedio_url)
def get_video_data(dic):
? ? url = dic['url']
? ? print(dic['name'],'正在下載......')
? ? data = requests.get(url=url,headers=header1s).content
# ? 持久化存儲操作
? ? with open(dic['name'],'wb') as fp:
? ? ? ? fp.write(data)
? ? ? ? print(dic['name'],'下載成功')
# 使用線程池對視頻數(shù)據(jù)進(jìn)行請求(較為耗時的阻塞操作)
pool = Pool(4)
pool.map(get_video_data,urls)

pool.close()
pool.join()

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

相關(guān)文章

  • python getopt 參數(shù)處理小示例

    python getopt 參數(shù)處理小示例

    getopt是python中專門用來處理參數(shù)的一個模塊,十分好用,下面提供一個小示例
    2009-06-06
  • windows python3安裝Jupyter Notebooks教程

    windows python3安裝Jupyter Notebooks教程

    這篇文章主要介紹了windows python3安裝Jupyter Notebooks教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python閉包執(zhí)行時值的傳遞方式實例分析

    Python閉包執(zhí)行時值的傳遞方式實例分析

    這篇文章主要介紹了Python閉包執(zhí)行時值的傳遞方式,結(jié)合實例形式分析了Python閉包執(zhí)行時的傳值原理與實現(xiàn)方式,代碼中包含了較為詳盡的注釋便于理解,需要的朋友可以參考下
    2018-06-06
  • Python分支結(jié)構(gòu)(switch)操作簡介

    Python分支結(jié)構(gòu)(switch)操作簡介

    這篇文章主要介紹了Python分支結(jié)構(gòu)(switch)操作簡介,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • python編程進(jìn)階之異常處理用法實例分析

    python編程進(jìn)階之異常處理用法實例分析

    這篇文章主要介紹了python編程進(jìn)階之異常處理用法,結(jié)合實例形式分析了python異常捕獲、處理相關(guān)語句、使用技巧與操作注意事項,需要的朋友可以參考下
    2020-02-02
  • Python玩轉(zhuǎn)PDF的各種騷操作

    Python玩轉(zhuǎn)PDF的各種騷操作

    Portable Document Format(可移植文檔格式),或者PDF是一種文件格式,可以用于跨操作系統(tǒng)的呈現(xiàn)和文檔交換。這篇文章主要介紹了Python玩轉(zhuǎn)PDF的各種騷操作,需要的朋友可以參考下
    2019-05-05
  • Python+Selenium實現(xiàn)在Geoserver批量發(fā)布Mongo矢量數(shù)據(jù)

    Python+Selenium實現(xiàn)在Geoserver批量發(fā)布Mongo矢量數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了如何利用Python+Selenium實現(xiàn)在 Geoserver批量發(fā)布來自Mongo中的矢量數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-07-07
  • PyTorch?之?強大的?hub?模塊和搭建神經(jīng)網(wǎng)絡(luò)進(jìn)行氣溫預(yù)測

    PyTorch?之?強大的?hub?模塊和搭建神經(jīng)網(wǎng)絡(luò)進(jìn)行氣溫預(yù)測

    hub 模塊是調(diào)用別人訓(xùn)練好的網(wǎng)絡(luò)架構(gòu)以及訓(xùn)練好的權(quán)重參數(shù),使得自己的一行代碼就可以解決問題,方便大家進(jìn)行調(diào)用,這篇文章主要介紹了PyTorch?之?強大的?hub?模塊和搭建神經(jīng)網(wǎng)絡(luò)進(jìn)行氣溫預(yù)測,需要的朋友可以參考下
    2023-03-03
  • PyCharm安裝Markdown插件的兩種方法

    PyCharm安裝Markdown插件的兩種方法

    Markdown是一種可以使用普通文本編輯器編寫的標(biāo)記語言,通過簡單的標(biāo)記語法,它可以使普通文本內(nèi)容具有一定的格式。這篇文章主要介紹了PyCharm安裝Markdown插件的兩種方法,需要的朋友可以參考下
    2019-06-06
  • Django權(quán)限設(shè)置及驗證方式

    Django權(quán)限設(shè)置及驗證方式

    這篇文章主要介紹了Django權(quán)限設(shè)置及驗證方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論