python多執行緒爬蟲

2021-09-29 22:28:32 字數 2060 閱讀 7549

python多執行緒爬蟲

python單執行緒爬蟲對於應付小規模資料是可以的,但是面對大量資料,我們就要用到多執行緒爬蟲技術。使用多執行緒,一方面可能會加快效率,另一方面可以施加一些小技巧,如不同的執行緒使用不同的**ip從而避免出發反爬機制。

python 多執行緒

python的多執行緒可以用thread類來實現,具體實現的**很簡單,直接貼上就行了。

python執行緒還有一些標準庫函式,如 threading.current_thread() 返回當前執行緒資訊,具體使用時候可以查文件。

def thread_job():

#執行緒要做的事情

# 開啟10個執行緒

for i in range(10):

# thread_job是執行緒要呼叫的函式,後面也可以帶引數

t = threading.thread(target=thread_job)

t.start()

python多執行緒是不是一定更有效率

python多執行緒只是有可能更有效率。

python中有gil(global interpreter lock),這個是全域性鎖,歷史遺留問題。這個東西保證了同一時刻只有乙個執行緒在乙個cpu上執行位元組碼,無法將多個執行緒對映到多個cpu上,也就是說python的多執行緒是偽多執行緒。並且執行緒之間的切換是有損耗的。

那麼python為什麼又要引入多執行緒呢?雖然同一時間內只能有乙個執行緒在乙個cpu上執行位元組碼,但是可以有多個執行緒去做i/o操作。在單執行緒中處理i/o操作是比較費時的,所以在i/o操作比較多的時候,選用多執行緒爬蟲是有可能進效率的;而需要cpu計算較多的時候,選用單執行緒更合適。

執行緒共享變數,鎖

多個執行緒執行時,免不了要訪問共有的全域性變數,容易導致全域性變數的混亂。那麼為了解決這個問題,引入了鎖。對**塊加上鎖之後,就只有當前執行緒獨佔這些資源,其他是不能訪問的,除非鎖釋放了。

如:

lock.acquire()

url = q.get()

lock.release()

多執行緒爬蟲

多執行緒爬蟲顧名思義,實際上也就是在爬蟲的基礎上增加乙個多執行緒。最關鍵的問題就是url的排程問題。url則可以用乙個佇列queue來儲存,多個執行緒在訪問queue時候使用鎖就行了。

import threading

from queue import queue

import requests

from bs4 import beautifulsoup

base_url = ''

headers =

def thread_job():

global q, lock

while not q.empty():

lock.acquire()

url = q.get()

lock.release()

soup = beautifulsoup(requests.get(url=url, headers=headers).text, 'lxml')

items = soup.find_all('div', attrs=)

for item in items:

movieitem = {}

movieitem['title'] = item.find('em').text

movieitem['date'] = item.find('span', attrs=).text

print(threading.current_thread(), movieitem)

if __name__ == '__main__':

q = queue()

lock = threading.lock()

# 總共65頁

for page in range(0, 65):

url = base_url.format(start=page*15)

q.put(url)

for i in range(10):

t = threading.thread(target=thread_job)

t.start()

python爬蟲 多執行緒爬蟲

在進行爬蟲工作的時候,考慮到爬蟲執行的速度慢,那麼怎樣提公升爬蟲的速度呢,那麼就得使用多執行緒爬蟲了,接下來我以糗事百科段子的爬取進行對多執行緒爬蟲的概述 github鏈結 鏈結一 不使用多執行緒爬取糗事百科 1.上 import urllib.request import re headers f...

python多執行緒爬蟲

先記錄一下,普通的糗事百科爬蟲 import urllib.request import re import time import urllib.error headers user agent mozilla 5.0 windows nt 10.0 win64 x64 rv 63.0 gecko...

python多執行緒爬蟲

blog spider.py coding utf 8 author mr.luo date 2021 3 16 13 57 import requests import csv urls f for page in range 1,6 def craw url r requests.get url...