回顧多執行緒爬取資料

2021-09-26 02:06:42 字數 2307 閱讀 8081

明確目的:將多執行緒爬蟲涉及到的技術點回顧一下

首先,是基本流程,多執行緒爬蟲架構圖如下

**用來存url,和 網頁的響應內容,給執行緒提供資料執行緒資料

class queue(object):

"""enqueue(item) 往佇列中新增乙個item元素

dequeue() 從佇列頭部刪除乙個元素

is_empty() 判斷乙個佇列是否為空

size() 返回佇列的大小

"""def __init__(self):

self.queue =

def put(self, item):

def get(self):

return self.queue.pop(0)

def isempty(self):

return self.queue ==

def size(self):

return len(self.queue)

當然,這是手寫的,(熟悉下方法的作用),這次我們直接從queue模組,匯入對列類

這次我們主要用put()和get()方法,其中給get(block=false)佇列將引發empty異常.

from queue import queue

urlqueue = queue()

dataqueue = queue()

lock = threading.lock()

url = ''

for i in range(1, 15):

urlqueue.put(url.format(i))

執行緒作業系統能夠進行運算排程的最小單位,程序中的實際運作單位

適用範圍

1.伺服器中的檔案管理或通訊控制

2.前後臺處理

3.非同步處理

爬取,解析

這裡我們要非同步爬取每個url對應的頁面,並解析爬取到的資料:非同步:訪問資源時在空閒等待時同時訪問其他資源

區別同步和非同步

乙個程序啟動的多個不相干執行緒,它們相互之間關係為非同步。

同步必須執行到底之後才能執行其他操作,而非同步可以任意操作

(任務a執行到乙個階段,需要 任務b的某個結果,a任務會停下來等待)

資料持久化,處理高併發

將資料寫到資料庫,由於執行緒共享全域性變數負責解析的執行緒會競爭同一資源,導致我們爬取的資料入庫時出現異常

因此我們可以加鎖實現執行緒的同步,

from threading import lock

lock = lock()

同步解決了執行緒的安全問題,但是會降低效率,

建立執行緒

def main()

headers =

# 佇列

urlqueue = queue()

dataqueue = queue()

lock = threading.lock()

url = ''

for i in range(1, 15):

urlqueue.put(url.format(i))

# 爬取執行緒

s_name_list = ['甲', '乙', '丙']

s_list =

for s_name in s_name_list:

s = spiderthread(s_name, headers, urlqueue, dataqueue)

s.start()

for s in s_list:

s.join()

# 解析執行緒

p_name_list = ['戊', '己', '庚']

p_list =

for p_name in p_name_list:

p = parsethread(p_name, dataqueue, lock, items)

p.start()

for p in p_list:

p.join()

使用多執行緒爬取資料

應用名稱 應用鏈結 import requests import time from multiprocessing import queue from threading import thread import json import urllib.parse class xiaomispide...

多執行緒爬取小公尺應用商店

目標 2 目標 所有應用分類 應用名稱 應用鏈結 實現步驟 1 頁面區域性重新整理 2 右鍵檢視網頁源 搜尋關鍵字未搜到 此 為動態載入 需要抓取網路資料報分析1 抓取返回json資料的url位址 headers中的request url 302 檢視並分析查詢引數 headers中的query s...

python 爬取GKGY會員多執行緒demo

coding utf 8 author wangjingyao importurllib importurllib2 importre importsys importthreading,queue,time importuser agents,random,time reload sys sys....