資料提取方法-多程式多執行緒爬蟲

zhao_04639發表於2020-11-16
  1. 爬取
    頁面的URL是:http://www.qiushibaike.com/8hr/page/1

思路分析:

確定url地址

url地址的規律非常明顯,一共只有13頁url地址

在這裡插入圖片描述

確定資料的位置

資料都在id='content-left’的div下的div中,在這個區域,url地址對應的響應和elements相同
在這裡插入圖片描述

  1. 上述程式碼改寫成多執行緒方式實現
    2.1 回顧多執行緒的方法使用
    在python3中,主執行緒主程式結束,子執行緒,子程式不會結束

為了能夠讓主執行緒回收子執行緒,可以把子執行緒設定為守護執行緒,即該執行緒不重要,主執行緒結束,子執行緒結束

t1 = threading.Thread(targe=func,args=(,))
t1.setDaemon(True)
t1.start() #此時執行緒才會啟動

2.2 回顧佇列模組的使用

from queue import Queue
q = Queue(maxsize=100)
item = {}
q.put_nowait(item) #不等待直接放,佇列滿的時候會報錯
q.put(item) #放入資料,佇列滿的時候回等待
q.get_nowait() #不等待直接取,佇列空的時候會報錯
q.get() #取出資料,佇列為空的時候會等待
q.qsize() #獲取佇列中現存資料的個數 
q.join() #佇列中維持了一個計數,計數不為0時候讓主執行緒阻塞等待,佇列計數為0的時候才會繼續往後執行
q.task_done() 
# put的時候計數+1,get不會-1,get需要和task_done 一起使用才會-1

2.3 多執行緒實現思路剖析
把爬蟲中的每個步驟封裝成函式,分別用執行緒去執行
不同的函式通過佇列相互通訊,函式間解耦
在這裡插入圖片描述

  1. 將上述程式碼改寫成多程式方式實現
    3.1 回顧多程式程的方法使用
from multiprocessing import Process
t1 = Process(targe=func,args=(,))
t1.daemon = True  #設定為守護程式
t1.start() #此時執行緒才會啟動

3.2 多程式中佇列的使用
多程式中使用普通的佇列模組會發生阻塞,對應的需要使用multiprocessing提供的JoinableQueue模組,其使用過程和線上程中使用的queue方法相同

重點
能夠通過多執行緒多程式實現爬蟲
掌握queue中put和get以及task_done和join方法的使用

相關文章