import requests
from lxml import etree
import os
from urllib import request
# def base_response():
def list_url(queue):
# 這裡沒有設定頁數, 只設定了固定當前頁
base_url = ''
headers =
# 進行第一次請求
response = requests.get(base_url,headers=headers)
html = response.text
# 匹配頁面中每首歌的 href路徑
html_ele = etree.html(html)
html_url = html_ele.xpath('//*[@class="doi2"]/li/div[2]/a/@href')
html_href = ''
# xpath 匹配 返回過來的是列表型別
for i in html_url:
# 擷取最後一串id數字與列表頁的 路徑進行拼接
# 所以 我們就不需要再次請求到詳情歌曲內再次獲取了
ob = html_href + i.split('/')[-1]
html_url_src(ob,queue,headers)
# html_url = html_ele.xpath('//*[@id="root"]/main/section/div/div[2]/div[1]/div[2]/div[2]/ul/li/div[2]/a/@href')
def html_url_src(href_scr,queue,headers):
# 向 每首歌的ajax url傳送請求
ob_response = requests.get(href_scr,headers=headers)
ajax_data = ob_response.json()
ajax_tracksforaudioplay=ajax_data['data']['tracksforaudioplay']
for x in ajax_tracksforaudioplay:
ajax_name = x['trackname'] # 獲取每首歌的 名稱
# 存入通訊列隊中
queue.put((ajax_src,ajax_name))
def download_src(src_mp4):
print(src_mp4)
if not os.path.exists('dowlond'):
os.mkdir('dowlond')
(ajax_src,ajax_name) = src_mp4
faml = 'dowlond/'+ajax_name+'.mp4'
ob = request.urlretrieve(ajax_src,faml)
if __name__ == '__main__':
from multiprocessing import queue,process,pool
# 建立 通訊
q = queue()
# 建立程序 進行獲取第一次請求的url
process = process(target=list_url,args=(q,))
process.start()
download_pool = pool(10)
for i in range(0,340):
src_mp4 = q.get()
download_pool.close()
download_pool.join()
process.join()
# list_response = requests.get(i,headers=headers)
# print(list_response)
# if __name__ == '__main__':
# ob = base_response()
# print(ob)
Python 多程序與程序池
fork方法是呼叫一次,返回兩次,原因在於作業系統將當前程序 父程序 複製出乙份程序 子程序 這兩個程序幾乎完全相同,於是fork方法分別在父程序和子程序中返回。子程序中永遠返回0,父程序中返回的是子程序的id。importos if name main print current process ...
02 5多程序 程序池
coding utf 8 import time,random from multiprocessing import pool defworker msg t start time.time print s開始執行 msg random.random 隨機生成0 1之間的浮點數 time.slee...
python多程序之程序池
在利用python進行系統管理的時候,特別是同時操作多個檔案目錄,或者遠端控制多台主機,並行操作可以節約大量的時間。當被操作物件數目不大時,可以直接利用multiprocessing中的process動態成生多個程序,十幾個還好,但如果是上百個,上千個目標,手動的去限制程序數量卻又太過繁瑣,此時可以...