python分布式爬蟲並解決假死問題

2021-08-22 09:55:24 字數 2193 閱讀 5085

python版本:3.5.4

系統:win10 x64

import urllib.request

url =

''file

='***.mp4'

urllib.request.retrieve(url,

file

)

但是博主在使用過程中發現,該函式沒有timeout方法。使用時,可能由於網路問題導致假死!

使用方法如下:

import urllib.request

url =

''file

='***.mp4'

response = urllib.request.urlopen(url, timeout=5)

data = response.read(

)with

open

(file

,'wb'

)as video:

video.write(data)

此函式有timeout設定,可以避免假死。

偽**如下:

import urllib.request

import socket

from urllib import error

from queue import queue

from threading import thread

import os

class

downloadworker

(thread)

:#定義乙個類,繼承自thread類,重寫其run函式

def__init__

(self, queue)

: thread.__init__(self)

self.queue = queue #標準的多執行緒實現方法都使用了queue

defrun

(self)

:while

true

: link,

file

= self.queue.get(

)#從佇列中獲取一組**以及對應的儲存位置

try:

#使用try except方法進行各種異常處理

)#標記佇列中的乙個元素已經被處理

defmain()

: queue = queue(

)#定義佇列

for x in

range(8

):#開啟8個執行緒

worker = downloadworker(queue)

worker.daemon =

true

worker.start(

)for linedata in txtdata:

#向佇列中放入資料

link = linedata[0]

file

= linedata[1]

queue.put(

(link,

file))

queue.join(

)#等待佇列中的資料被處理完畢

if __name__ ==

'__main__'

: main(

)

爬蟲 分布式爬蟲

爬蟲的本質 很多搞爬蟲的總愛吹噓分布式爬蟲,彷彿只有分布式才有逼格,不是分布式簡直不配叫爬蟲,這是一種很膚淺的思想。分布式只是提高爬蟲功能和效率的乙個環節而已,它從來不是爬蟲的本質東西。爬蟲的本質是網路請求和資料處理,如何穩定地訪問網頁拿到資料,如何精準地提取出高質量的資料才是核心問題。分布式爬蟲只...

分布式爬蟲

乙個基於scrapy redis的分布式爬蟲模板,在scrapy redis自帶的example的基礎上進行修改,新增在實際爬取過程中大部分爬蟲可能用到的功能,使的構建分布式爬蟲更加的簡單。scrapy redis windows ubuntu sudo apt get install redis ...

分布式爬蟲

修改普通爬蟲專案為分布式爬蟲 1.主爬蟲檔案myspider.py 做如下修改,其他不做修改 import scrapy from items import myitem 匯入資料模型 from scrapy redis.spiders import redisspider 匯入scrapy red...