Python3多線程處理爬蟲(chóng)的實(shí)戰(zhàn)
多線程
到底什么是多線程?說(shuō)起多線程我們首先從單線程來(lái)說(shuō)。例如,我在這里看書(shū),等這件事情干完,我就再去聽(tīng)音樂(lè)。對(duì)于這兩件事情來(lái)說(shuō)都是屬于單線程,是一個(gè)完成了再接著完成下一個(gè)。但是我一般看書(shū)一邊聽(tīng)歌,同時(shí)進(jìn)行,這個(gè)就屬于多線程了。
在爬蟲(chóng)過(guò)程中,如果只使用單線程進(jìn)行爬取,效率會(huì)比較低下,因此多線程的爬蟲(chóng)處理方式更為常用。Python3提供了threading模塊來(lái)支持多線程編程,以下是使用Python3多線程處理爬蟲(chóng)的一般步驟:
導(dǎo)入依賴模塊
import threading import requests from queue import Queue
構(gòu)建爬蟲(chóng)類(lèi)
class Spider: def __init__(self): self.urls = Queue() # 待爬取的鏈接隊(duì)列 self.results = [] # 存儲(chǔ)爬取結(jié)果的列表 self.lock = threading.Lock() # 線程鎖 self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 獲取鏈接列表 def get_urls(self): # 這里可以從文件、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)等方式獲取待爬取的鏈接 # 這里以一個(gè)示例鏈接列表作為例子 urls = ['<https://www.example.com/page1>', '<https://www.example.com/page2>', '<https://www.example.com/page3>'] for url in urls: self.urls.put(url) # 爬取頁(yè)面并處理結(jié)果 def crawl(self): while not self.urls.empty(): url = self.urls.get() try: response = requests.get(url, headers=self.headers) # 這里可以對(duì)response進(jìn)行解析,獲取需要的信息 # 這里以抓取頁(yè)面title作為例子 title = response.text.split('<title>')[1].split('</title>')[0] self.results.append(title) except Exception as e: print(e) finally: self.urls.task_done() # 啟動(dòng)多線程爬蟲(chóng) def run(self, thread_num=10): self.get_urls() for i in range(thread_num): t = threading.Thread(target=self.crawl) t.start() self.urls.join() # 將結(jié)果寫(xiě)入文件或者數(shù)據(jù)庫(kù) with self.lock: with open('result.txt', 'a') as f: for result in self.results: f.write(result + '\\n')
到此這篇關(guān)于Python3多線程處理爬蟲(chóng)的實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Python3多線程爬蟲(chóng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python進(jìn)行有限元仿真的使用及創(chuàng)建
這篇文章主要為大家介紹了Python進(jìn)行有限元仿真的創(chuàng)建及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10PyMongo 查詢數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了PyMongo 查詢數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06Python3中類(lèi)、模塊、錯(cuò)誤與異常、文件的簡(jiǎn)易教程
這篇文章主要給大家介紹了關(guān)于Python3中類(lèi)、模塊、錯(cuò)誤與異常、文件的相關(guān)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11python輸出結(jié)果刷新及進(jìn)度條的實(shí)現(xiàn)操作
這篇文章主要介紹了python輸出結(jié)果刷新及進(jìn)度條的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Python實(shí)現(xiàn)清理重復(fù)文件功能的示例代碼
在電腦上或多或少的存在一些重復(fù)文件,體積小的倒沒(méi)什么,如果體積大的就很占內(nèi)存了。本文用python制作了一個(gè)刪除重復(fù)文件的小工具,核心代碼很簡(jiǎn)單,希望對(duì)你有所幫助2022-07-07Windows系統(tǒng)下實(shí)現(xiàn)pycharm運(yùn)行.sh文件(本地運(yùn)行和打開(kāi)服務(wù)器終端)
PyCharm是Python開(kāi)發(fā)的高效率IDE,但是很多時(shí)候需要同時(shí)開(kāi)發(fā)Bash(shell)腳本,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下實(shí)現(xiàn)pycharm運(yùn)行.sh文件(本地運(yùn)行和打開(kāi)服務(wù)器終端)的相關(guān)資料,需要的朋友可以參考下2022-09-09Python Pygame實(shí)戰(zhàn)之飛機(jī)大戰(zhàn)的實(shí)現(xiàn)
飛機(jī)大戰(zhàn)想必是很多人童年時(shí)期的經(jīng)典游戲,這篇文章主要給大家介紹了關(guān)于如何利用python中的Pygame模塊寫(xiě)一個(gè)簡(jiǎn)單的飛機(jī)大戰(zhàn)小游戲的相關(guān)資料,需要的朋友可以參考下2022-03-03