成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python爬蟲系列精品之多線程的簡單實例

1.先附上沒有用多線程的包圖網(wǎng)爬蟲的代碼
import requests
from lxml import etree
import os
import time

站在用戶的角度思考問題,與客戶深入溝通,找到托里網(wǎng)站設(shè)計與托里網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋托里地區(qū)。

start_time = time.time()#記錄開始時間
for i in range(1,7):
#1.請求包圖網(wǎng)拿到整體數(shù)據(jù)
response = requests.get("https://ibaotu.com/shipin/7-0-0-0-0-%s.html" %str(i))

#2.抽取 視頻標題、視頻鏈接
html = etree.HTML(response.text)
tit_list = html.xpath('//span[@class="video-title"]/text()')#獲取視頻標題
src_list = html.xpath('//div[@class="video-play"]/video/@src')#獲取視頻鏈接
for tit,src in zip(tit_list,src_list):
    #3.下載視頻
    response = requests.get("http:" + src)
    #給視頻鏈接頭加上http頭,http快但是不一定安全,https安全但是慢

    #4.保存視頻
    if os.path.exists("video1") == False:#判斷是否有video這個文件夾
        os.mkdir("video1")#沒有的話創(chuàng)建video文件夾
    fileName = "video1\\" + tit + ".mp4"#保存在video文件夾下,用自己的標題命名,文件格式是mp4
                                        #有特殊字符的話需要用\來注釋它,\是特殊字符所以這里要用2個\\
    print("正在保存視頻文件: " +fileName)#打印出來正在保存哪個文件
    with open (fileName,"wb") as f:#將視頻寫入fileName命名的文件中
       f.write(response.content)

end_time = time.time()#記錄結(jié)束時間
print("耗時%d秒"%(end_time-start_time))#輸出用了多少時間

2.將上述代碼套用多線程,先創(chuàng)建多線程
data_list = []#設(shè)置一個全局變量的列表
#創(chuàng)建多線程
class MyThread(threading.Thread):
def init(self, q):
threading.Thread.init(self)
self.q = q

#調(diào)用get_index()
def run(self) -> None:
    self.get_index()

#拿到網(wǎng)址后獲取所需要的數(shù)據(jù)并存入全局變量data_list中
def get_index(self):
    url = self.q.get()
    try:
        resp = requests.get(url)# 訪問網(wǎng)址
        #將返回的數(shù)據(jù)轉(zhuǎn)成lxml格式,之后使用xpath進行抓取
        html = etree.HTML(resp.content)
        tit_list = html.xpath('//span[@class="video-title"]/text()')  # 獲取視頻標題
        src_list = html.xpath('//div[@class="video-play"]/video/@src')  # 獲取視頻鏈接
        for tit, src in zip(tit_list, src_list):
            data_dict = {}#設(shè)置一個存放數(shù)據(jù)的字典
            data_dict['title'] = tit#往字典里添加視頻標題
            data_dict['src'] = src#往字典里添加視頻鏈接
            #print(data_dict)
            data_list.append(data_dict)#將這個字典添加到全局變量的列表中

    except Exception as e:
        # 如果訪問超時就打印錯誤信息,并將該條url放入隊列,防止出錯的url沒有爬取
        self.q.put(url)
        print(e)

3.用隊列queue,queue模塊主要是多線程,保證線程安全使用的

def main():

創(chuàng)建隊列存儲url

q = queue.Queue()
for i in range(1,6):

    # 將url的參數(shù)進行編碼后拼接到url
    url = 'https://ibaotu.com/shipin/7-0-0-0-0-%s.html'%str(i)
    # 將拼接好的url放入隊列中
    q.put(url)

#如果隊列不為空,就繼續(xù)爬
while not q.empty():
    # 創(chuàng)建3個線程
    ts = []
    for count in range(1,4):
        t = MyThread(q)
        ts.append(t)
    for t in ts:
        t.start()
    for t in ts:
        t.join()

4.創(chuàng)建存儲方法

#提取data_list的數(shù)據(jù)并保存
def save_index(data_list):
if data_list:
for i in data_list:

下載視頻

        response = requests.get("http:" + i['src'])
        #給視頻鏈接頭加上http頭,http快但是不安全,https安全但是慢

        #保存視頻
        if os.path.exists("video") == False:  # 判斷是否有video這個文件夾
            os.mkdir("video")  # 沒有的話創(chuàng)建video文件夾
        fileName = "video\\" + i['title'] + ".mp4"  # 保存在video文件夾下,用自己的標題命名,文件格式是mp4
        #有特殊字符的話需要用\來注釋它,\是特殊字符所以這里要用2個\\
        print("正在保存視頻文件: " + fileName)  # 打印出來正在保存哪個文件
        with open(fileName, "wb") as f:  # 將視頻寫入fileName命名的文件中
            f.write(response.content)

5.最后就是調(diào)用函數(shù)了
if name== 'main':
start_time = time.time()
#啟動爬蟲
main()
save_index(data_list)
end_time = time.time()
print("耗時%d"%(end_time-start_time))

6.附上完整的多線程代碼

import requests
from lxml import etree
import os
import queue
import threading
import time

data_list = []#設(shè)置一個全局變量的列表

#創(chuàng)建多線程
class MyThread(threading.Thread):
def init(self, q):
threading.Thread.init(self)
self.q = q

#調(diào)用get_index()
def run(self) -> None:
    self.get_index()

#拿到網(wǎng)址后獲取所需要的數(shù)據(jù)并存入全局變量data_list中
def get_index(self):
    url = self.q.get()
    try:
        resp = requests.get(url)# 訪問網(wǎng)址
        #將返回的數(shù)據(jù)轉(zhuǎn)成lxml格式,之后使用xpath進行抓取
        html = etree.HTML(resp.content)
        tit_list = html.xpath('//span[@class="video-title"]/text()')  # 獲取視頻標題
        src_list = html.xpath('//div[@class="video-play"]/video/@src')  # 獲取視頻鏈接
        for tit, src in zip(tit_list, src_list):
            data_dict = {}#設(shè)置一個存放數(shù)據(jù)的字典
            data_dict['title'] = tit#往字典里添加視頻標題
            data_dict['src'] = src#往字典里添加視頻鏈接
            #print(data_dict)
            data_list.append(data_dict)#將這個字典添加到全局變量的列表中

    except Exception as e:
        # 如果訪問超時就打印錯誤信息,并將該條url放入隊列,防止出錯的url沒有爬取
        self.q.put(url)
        print(e)

def main():

創(chuàng)建隊列存儲url

q = queue.Queue()
for i in range(1,7):

    # 將url的參數(shù)進行編碼后拼接到url
    url = 'https://ibaotu.com/shipin/7-0-0-0-0-%s.html'%str(i)
    # 將拼接好的url放入隊列中
    q.put(url)

#如果隊列不為空,就繼續(xù)爬
while not q.empty():
    # 創(chuàng)建3個線程
    ts = []
    for count in range(1,4):
        t = MyThread(q)
        ts.append(t)
    for t in ts:
        t.start()
    for t in ts:
        t.join()

#提取data_list的數(shù)據(jù)并保存
def save_index(data_list):
if data_list:
for i in data_list:

下載視頻

        response = requests.get("http:" + i['src'])
        #給視頻鏈接頭加上http頭,http快但是不安全,https安全但是慢

        #保存視頻
        if os.path.exists("video") == False:  # 判斷是否有video這個文件夾
            os.mkdir("video")  # 沒有的話創(chuàng)建video文件夾
        fileName = "video\\" + i['title'] + ".mp4"  # 保存在video文件夾下,用自己的標題命名,文件格式是mp4
        #有特殊字符的話需要用\來注釋它,\是特殊字符所以這里要用2個\\
        print("正在保存視頻文件: " + fileName)  # 打印出來正在保存哪個文件
        with open(fileName, "wb") as f:  # 將視頻寫入fileName命名的文件中
            f.write(response.content)

if name== 'main':
start_time = time.time()
#啟動爬蟲
main()
save_index(data_list)
end_time = time.time()
print("耗時%d"%(end_time-start_time))

7.這2個爬蟲我都設(shè)置了開始時間和結(jié)束時間,可以用(結(jié)束時間-開始時間)來計算比較兩者的效率。

python爬蟲系列精品之多線程的簡單實例
python爬蟲系列精品之多線程的簡單實例

網(wǎng)站名稱:python爬蟲系列精品之多線程的簡單實例
本文網(wǎng)址:http://jinyejixie.com/article42/jjhghc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、虛擬主機網(wǎng)站收錄、自適應(yīng)網(wǎng)站響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
湾仔区| 白山市| 稷山县| 宜昌市| 岳阳县| 子长县| 垣曲县| 兴和县| 峨边| 门源| 手游| 民勤县| 南京市| 郴州市| 遵义县| 会同县| 郴州市| 会同县| 平阳县| 微博| 东莞市| 民县| 青海省| 扶沟县| 福海县| 平湖市| 武汉市| 泾源县| 集贤县| 吴旗县| 普洱| 石景山区| 长沙市| 陆川县| 镇原县| 甘德县| 呈贡县| 永仁县| 黔江区| 南溪县| 成武县|