成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > 基于python分布式爬蟲(chóng)并解決假死的問(wèn)題

基于python分布式爬蟲(chóng)并解決假死的問(wèn)題

熱門(mén)標(biāo)簽:京華圖書(shū)館地圖標(biāo)注 佛山通用400電話申請(qǐng) 淮安呼叫中心外呼系統(tǒng)如何 看懂地圖標(biāo)注方法 廣東旅游地圖標(biāo)注 蘇州人工外呼系統(tǒng)軟件 電話機(jī)器人貸款詐騙 打印谷歌地圖標(biāo)注 電話外呼系統(tǒng)招商代理

python版本:3.5.4

系統(tǒng):win10 x64

通過(guò)網(wǎng)頁(yè)下載視頻

方法一:使用urllib.retrieve函數(shù)

放函數(shù)只需要兩個(gè)參數(shù)即可下載相應(yīng)內(nèi)容到本地,一個(gè)是網(wǎng)址,一個(gè)是保存位置

import urllib.request
url = 'http://xxx.com/xxx.mp4'
file = 'xxx.mp4'
urllib.request.retrieve(url, file)

但是博主在使用過(guò)程中發(fā)現(xiàn),該函數(shù)沒(méi)有timeout方法。使用時(shí),可能由于網(wǎng)絡(luò)問(wèn)題導(dǎo)致假死!

方法二:使用urllib.request.urlopen函數(shù)

使用方法如下:

import urllib.request
url = 'http://xxx.com/xxx.mp4'
file = 'xxx.mp4'
response = urllib.request.urlopen(url, timeout=5)
data = response.read()
with open(file, 'wb') as video:
    video.write(data)

此函數(shù)有timeout設(shè)置,可以避免假死。

使程序并行化

偽代碼如下:

import urllib.request
import socket
from urllib import error
from queue import Queue
from threading import Thread
import os
class DownloadWorker(Thread):  #定義一個(gè)類,繼承自thread類,重寫(xiě)其run函數(shù)
    def __init__(self, queue):
        Thread.__init__(self)
        self.queue = queue     #標(biāo)準(zhǔn)的多線程實(shí)現(xiàn)方法都使用了queue
    def run(self):
        while True:
            link, file = self.queue.get() #從隊(duì)列中獲取一組網(wǎng)址以及對(duì)應(yīng)的保存位置
            try: #使用try except方法進(jìn)行各種異常處理
                response = urllib.request.urlopen(link, timeout=5)
                data = response.read()
                with open(file, 'wb') as video:
                    video.write(data)
            except error.HTTPError as err: 
                print('HTTPerror, code: %s' % err.code)
            except error.URLError as err:
                print('URLerror, reason: %s' % err.reason)
            except socket.timeout:
                print('Time Out!')
            except:
                print('Unkown Error!')
            self.queue.task_done() #標(biāo)記隊(duì)列中的一個(gè)元素已經(jīng)被處理
def main():
    queue = Queue() #定義隊(duì)列
    for x in range(8): #開(kāi)啟8個(gè)線程
        worker = DownloadWorker(queue)
        worker.daemon = True
        worker.start()
    for lineData in txtData: #向隊(duì)列中放入數(shù)據(jù)
        link = lineData[0]
        file = lineData[1]
        queue.put((link, file))
    queue.join() #等待隊(duì)列中的數(shù)據(jù)被處理完畢
if __name__ == '__main__':
    main()

補(bǔ)充:基于python的一個(gè)大規(guī)模爬蟲(chóng)遇到的一些問(wèn)題總結(jié)

前些天在某個(gè)論壇看到一些很感興趣的信息,想要將其爬取下來(lái),預(yù)估了下規(guī)模,想要做的是:將整個(gè)論壇的所有文章爬取下來(lái),保存為本地的txt。

一開(kāi)始寫(xiě)了個(gè)爬蟲(chóng),大致思路是:

先從論壇的起始頁(yè)開(kāi)始爬起,得到所有分區(qū)版面的網(wǎng)址

然后從分區(qū)版面得到該區(qū)總共的頁(yè)碼數(shù),根據(jù)網(wǎng)址規(guī)律得到分區(qū)版面所有頁(yè)數(shù)的網(wǎng)頁(yè)

從上面的分區(qū)版面的某一頁(yè)的網(wǎng)頁(yè)中得到該頁(yè)所有文章的網(wǎng)址,然后抓取這些文章,保存為本地txt

上面的思路是典型的自上而下的思路,這樣第一版本的代碼就寫(xiě)好了。

下面進(jìn)入正題,總結(jié)一下遇到的問(wèn)題:

一、大規(guī)模爬蟲(chóng)被網(wǎng)站封禁的問(wèn)題

上面的爬蟲(chóng)在調(diào)試階段表現(xiàn)還是不錯(cuò)的,后來(lái)實(shí)測(cè)中,跑起來(lái)發(fā)現(xiàn),跑了一段時(shí)間后就會(huì)發(fā)生http錯(cuò)誤,由于使用的是有線網(wǎng),且檢查后不是網(wǎng)絡(luò)本身的錯(cuò)誤,所以判定為本網(wǎng)站封禁了,于是開(kāi)始研究這個(gè)問(wèn)題。

一般來(lái)說(shuō),python爬蟲(chóng)將自己偽裝為瀏覽器時(shí),使用的方法是在urllib2.Request函數(shù)中加入headers參數(shù),也即類似于

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"

的user_agent代碼片段,但是這樣在大規(guī)模爬取中,就會(huì)被網(wǎng)站判定為一個(gè)用于長(zhǎng)期快速訪問(wèn),容易被封禁。本來(lái)在開(kāi)始的代碼中,爬蟲(chóng)訪問(wèn)兩個(gè)網(wǎng)頁(yè)之間是加入了0.5s的時(shí)間延時(shí),就是為了防止這一問(wèn)題的,結(jié)果還是不可以,而如果將延時(shí)加大,將會(huì)影響到爬蟲(chóng)的效率,而且如此大規(guī)模的爬取更是不知要何時(shí)才能結(jié)束。

于是,考慮偽裝成多個(gè)瀏覽器的訪問(wèn)的方法來(lái)解決這一問(wèn)題,具體做的就是,找許多user_agent,保存為一個(gè)列表,而在訪問(wèn)網(wǎng)頁(yè)時(shí),輪流使用以上user_agent,這樣就偽裝成了許多瀏覽器。附上具體子函數(shù)如下:

user_agent_list = [
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
 
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
        "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
 
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
 
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0 Zune 3.0)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 4.0.20402; MS-RTC LM 8)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; InfoPath.2)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.0.04506; Media Center PC 5.0; SLCC1)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET CLR 3.0.04506; Media Center PC 5.0; SLCC1)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; FDM; Tablet PC 2.0; .NET CLR 4.0.20506; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.0.04506; Media Center PC 5.0; SLCC1; Tablet PC 2.0)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; InfoPath.2)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.3029; Media Center PC 6.0; Tablet PC 2.0)',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; Media Center PC 3.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; FDM; .NET CLR 1.1.4322)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar; .NET CLR 2.0.50727)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.40607)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322)',
        'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.0.3705; Media Center PC 3.1; Alexa Toolbar; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
        'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)',
        'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; el-GR)',
        'Mozilla/5.0 (MSIE 7.0; Macintosh; U; SunOS; X11; gu; SV1; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
        'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; c .NET CLR 3.0.04506; .NET CLR 3.5.30707; InfoPath.1; el-GR)',
        'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; c .NET CLR 3.0.04506; .NET CLR 3.5.30707; InfoPath.1; el-GR)',
        'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; fr-FR)',
        'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US)',
        'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.2; WOW64; .NET CLR 2.0.50727)',
        'Mozilla/4.79 [en] (compatible; MSIE 7.0; Windows NT 5.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
        'Mozilla/4.0 (Windows; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
        'Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30)',
        'Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1)',
        'Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 6.0)',
        'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)',
        'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;)',
        'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; YPC 3.2.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618)',
        'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; YPC 3.2.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)',
        'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; Media Center PC 5.0; .NET CLR 2.0.50727)',
        'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 3.0.04506)',
        'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET CLR 1.1.4322)',
       ]

上面大概有60多個(gè)user_agent,這樣就偽裝成了60多個(gè)瀏覽器。嘗試這種方法后,發(fā)現(xiàn)在此長(zhǎng)時(shí)間爬取,出錯(cuò)或者訪問(wèn)速度變慢的情況就很少出現(xiàn)了,基本解決了這一問(wèn)題。

但是,需要注意的是,如果網(wǎng)站不是根據(jù)user_agent,而是根據(jù)用戶的IP來(lái)封禁的話,那就不好辦了,網(wǎng)上的一些解決辦法是云計(jì)算之類的,貌似略麻煩,不太適合個(gè)人用戶,有興趣的可以看一下相關(guān)資料。

二、長(zhǎng)時(shí)間無(wú)人值守網(wǎng)絡(luò)不穩(wěn)定的問(wèn)題

由于規(guī)模略大,不可能一直守在電腦前,所以,代碼的穩(wěn)定性(容錯(cuò)性)需要較高,這里,python的try……except……語(yǔ)法就發(fā)揮了很好的作用。

前幾天的實(shí)踐證明,出錯(cuò)大多數(shù)是由于一時(shí)的網(wǎng)絡(luò)不穩(wěn)定而出現(xiàn)的,而解決辦法也很簡(jiǎn)單,重新訪問(wèn)以下就好了,于是將抓取網(wǎng)頁(yè)的函數(shù)寫(xiě)成下面的形式

def get_page_first(url):
    global user_agent_index
    user_agent_index+=1
    user_agent_index%=len(user_agent_list)
    user_agent =  user_agent_list[user_agent_index]
    #print user_agent
    print user_agent_index
    headers = { 'User-Agent' : user_agent }
    print u"正在抓取"+url
    req = urllib2.Request(url,headers = headers)
    try:
        response = urllib2.urlopen(req,timeout=30)
        page = response.read()
    except:
        response = urllib2.urlopen(req,timeout=30)
        page = response.read()
    print u"抓取網(wǎng)頁(yè)"+url
    return page

這里,如果訪問(wèn)一個(gè)網(wǎng)頁(yè)30s無(wú)響應(yīng),就重新訪問(wèn)?;窘鉀Q了這一問(wèn)題。

三、保存為本地txt時(shí)名稱出錯(cuò)的問(wèn)題

由于txt的命名采用的是 “日期--作者——標(biāo)題”的形式,而一些帖子的標(biāo)題含有諸如?等txt中不允許出現(xiàn)的命名,這樣就會(huì)發(fā)生報(bào)錯(cuò)。這里解決辦法是,如果保存文件出錯(cuò),則先嘗試將名稱改為“日期--作者——編號(hào)”形式,仍然出錯(cuò),而保存為“日期--編號(hào)”的形式。具體代碼如下:

try:
                if news_author[0]=='':
                    save_file(path+'//'+news_time[0]+'--'+news_title+'.txt',news)
                else:
                    save_file(path+'//'+news_time[0]+'--'+news_author[0]+u"——"+news_title+'.txt',news)
            except:
                try:
                    save_file(path+'//'+news_time[0]+'--'+news_title+'.txt',news)
                except:
                    save_file(path+'//'+news_time[0]+'--'+str(j)+'-'+str(index)+'.txt',news)

四、保存文件重名覆蓋的問(wèn)題

開(kāi)始的代碼考慮不周,沒(méi)有想到同一天的帖子中會(huì)出現(xiàn)作者和名稱都相同的情況,于是后來(lái)發(fā)現(xiàn)一些版面的總文章數(shù)和保存的txt數(shù)目不同,后來(lái)發(fā)現(xiàn)了這一問(wèn)題。于是將保存文件的子函數(shù)修改如下,大致思路就是保存前先檢查同名文件是否存在,不存在直接保存;存在的話,在名稱后加(i)(i從1開(kāi)始遞增變化),重復(fù)上述步驟,直至同名文件不存在:

def save_file(path,inf):
    if not os.path.exists(path):
        f = file(path, 'w')
        f.write(inf)
        f.close
    else:
        i=0
        while(1):
            i+=1
            tpath=path[:-4]
            tpath+='('+str(i)+')'+'.txt'
            if not os.path.exists(tpath):
                break
        f = file(tpath, 'w')
        f.write(inf)
        f.close

五、多線程抓取以及無(wú)圖版抓取 網(wǎng)頁(yè)抓取速度的一些問(wèn)題

理論上,大規(guī)模的爬蟲(chóng)可以采用多線程的方法加快抓取速度,但是考慮到不要對(duì)網(wǎng)站造成過(guò)大的壓力,也為避免被網(wǎng)站封禁IP,所以主程序中未引入多線程的概念。但是又為了加快進(jìn)度,就手動(dòng)打開(kāi)多個(gè)命令行窗口運(yùn)行爬蟲(chóng),來(lái)同時(shí)抓取不同的版面的文章。這樣,當(dāng)一個(gè)程序報(bào)錯(cuò),其他的仍然能運(yùn)行,也是增強(qiáng)了程序的容錯(cuò)性。

實(shí)際運(yùn)行一段時(shí)間后,發(fā)現(xiàn)該程序的時(shí)間延遲最主要是發(fā)生在抓取網(wǎng)頁(yè)的環(huán)節(jié),也就是下載網(wǎng)頁(yè)的時(shí)間上,想要提高效率也就是需要改善這一環(huán)節(jié)。當(dāng)我正考慮應(yīng)該采用什么辦法解決這一問(wèn)題時(shí),忽然發(fā)現(xiàn),原來(lái)該論壇還提供了無(wú)圖版的網(wǎng)頁(yè)(也就是類似于手機(jī)版),這樣,每個(gè)網(wǎng)頁(yè)的大小就減小了很多,而且文章內(nèi)容之類所需信息仍然存在,所以就重新修改了代碼。然后,發(fā)現(xiàn)速度確實(shí)有了極大的提升。所以,以后 抓取網(wǎng)頁(yè)前一定要先看看是否存在類似于無(wú)圖版(手機(jī)版)的網(wǎng)頁(yè),這樣就可以很大的提高速度。

六、整體總結(jié)

經(jīng)過(guò)后期一些完善,該代碼基本上已經(jīng)能夠連續(xù)運(yùn)行好幾天而不出錯(cuò)了,穩(wěn)定性基本解決了,而且沒(méi)有漏抓的現(xiàn)象。經(jīng)過(guò)大致十幾天日夜兼程,終于抓完了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Python爬蟲(chóng)基礎(chǔ)之requestes模塊
  • python爬蟲(chóng)之生活常識(shí)解答機(jī)器人
  • python爬蟲(chóng)之利用selenium模塊自動(dòng)登錄CSDN
  • python爬蟲(chóng)之爬取筆趣閣小說(shuō)
  • python爬蟲(chóng)之利用Selenium+Requests爬取拉勾網(wǎng)
  • python爬蟲(chóng)框架feapder的使用簡(jiǎn)介
  • Python爬蟲(chóng)之爬取2020女團(tuán)選秀數(shù)據(jù)
  • Python爬蟲(chóng)之教你利用Scrapy爬取圖片
  • python PyQt5 爬蟲(chóng)實(shí)現(xiàn)代碼
  • 利用Python網(wǎng)絡(luò)爬蟲(chóng)爬取各大音樂(lè)評(píng)論的代碼
  • python爬蟲(chóng)基礎(chǔ)之簡(jiǎn)易網(wǎng)頁(yè)搜集器

標(biāo)簽:股票 呼和浩特 畢節(jié) 江蘇 湖州 中山 衡水 駐馬店

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于python分布式爬蟲(chóng)并解決假死的問(wèn)題》,本文關(guān)鍵詞  基于,python,分布式,爬蟲(chóng),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于python分布式爬蟲(chóng)并解決假死的問(wèn)題》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于基于python分布式爬蟲(chóng)并解決假死的問(wèn)題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    爱啪啪综合导航| 黄色在线观看国产| 日韩欧美在线视频| 91午夜精品亚洲一区二区三区| 欧美一级二级三级乱码| 中文字幕人成乱码在线观看| 欧美极度另类性三渗透| 狠狠插狠狠操| 国产特级淫片免费看| 夜夜爽妓女8888视频免费观看| av在线免费观看不卡| 中国女人真人一级毛片| 四川一级毛毛片| 国产精品啪啪啪视频| 亚洲电影免费观看高清完整版在线观看| 国产亚洲精品美女久久久久| 欧美在线亚洲一区| 雨宫琴音一区二区三区| 2022国产麻豆剧果冻传媒剧情| 六月婷婷综合| 91在线直播亚洲| 18精品爽视频在线观看| 亚洲国产91精品在线观看| 久久精品无码一区二区三区毛片| av手机免费在线观看| 亚洲一卡二卡三卡四卡无卡久久| 免费一区视频| 五月激情综合婷婷| 激情小说亚洲| 伊人开心综合网| 国产一区免费在线观看| 欧亚在线中文字幕免费| 日本在线观看一区二区| 欧美久久电影| 免费污片软件| 大杳蕉精品视频在线观看| 中文字幕中文字幕在线中文字幕三区| 手机看片福利在线| 91青娱乐在线视频| 91av手机在线| 99久精品视频在线观看视频| 四虎在线视频免费观看| 中文字幕无乱码| 国产免费亚洲高清| 亚洲欧美激情一区二区| 91蝌蚪九色| 亚洲第一在线视频| 五十路中文字幕| 男人先锋资源| 中文字幕一区二区三区5566| 国产精品免费看久久久无码| 偷拍精品一区二区三区| 欧美bbbxxxxx| 456亚洲影院| 国产一区二区三区四区三区四| 夜夜嗨av一区二区三区中文字幕| 高跟丝袜一区二区三区| 日本孕妇大胆孕交无码| 中文字幕免费观看一区| 3d动漫精品啪啪一区二区三区免费| 久久免费高清| 91小视频在线| 日本精品一区在线| 特大黑人巨人吊xxxx| 亚洲欧美日韩国产综合精品二区| 91精品国产高清自在线| 男人操女人逼免费视频| 刘亦菲久久免费一区二区| 亚洲熟女乱综合一区二区三区| 日本一区二区三区视频在线观看| 99久久这里有精品| 成人精品视频久久久久| 日本一区二区精品| 婷婷在线视频观看| 中文字幕免费视频| 国产欧美日韩卡一| 欧美影视一区二区三区| 三上悠亚ssⅰn939无码播放| 欧美一级淫片aaaaaaa视频| 精品成人免费一区二区在线播放| 亚洲女同二女同志奶水| 色诱色偷偷久久综合| 无码av天堂一区二区三区| 肉大捧一出免费观看网站在线播放| 亚洲成人激情在线| 国产日韩欧美一区二区三区| 午夜精品久久久久久久男人的天堂| 国产精品一区二区久久久| 免费成人小视频| jizz日本在线播放| 精品久久香蕉国产线看观看亚洲| 99在线免费观看| 国产精品国产三级国产普通话蜜臀| 一本久道久久综合狠狠爱| 欧美成人3dxxxx| 一本一道精品欧美中文字幕| 欧美xxbbb1手交| 粉嫩绯色av一区二区在线观看| 久久精品一区二区三| 午夜精品视频一区二区三区在线看| 97久久精品| 国产精品女人久久久久久| 国产尤物一区二区| 68国产成人综合久久精品| 久久久国产精品一区二区三区| 亚洲日本va| 亚洲影院一区| 欧美日韩激情在线一区二区三区| 日韩精品极品在线观看| 国产最新精品| 亚洲人成色777777精品音频| a免费在线观看| 亚洲免费视频一区二区| 丰满少妇一区二区| 久久精品亚洲欧美日韩精品中文字幕| 精品一区视频| 亚洲AV无码精品自拍| 偷拍精品精品一区二区三区| 999成人精品视频线3| 神马电影久久| 久草视频手机在线| 夜夜操天天干| 欧美久久电影| 亚洲美女偷拍久久| 91久久国产视频| 日韩av在线免播放器| 欧美绝品在线观看成人午夜影视| 国精品一区二区| 黄色小说在线观看视频| 高清全集视频免费在线| 国产三级aaa| 中文字幕人妻一区二区三区| 久久亚洲成人精品| 日韩精品在线视频免费观看| 日韩天堂在线| 狠狠操图片视频| 在线国产精品网| 国产精品久久久久影视| 欧美一级二级三级乱码| 国产精品va在线播放我和闺蜜| 欧美精品电影免费在线观看| 激情五月婷婷久久| 蜜桃网站成人| 日韩精品一区二区三区第95| 免费成人深夜夜行视频| 亚洲 高清 成人 动漫| 美女被爆操网站| 99久久精品国产亚洲精品| 男人操女人在线观看| 成年永久一区二区三区免费视频| 亚洲天堂aaa| 婷婷丁香花五月天| 蜜桃91精品入口| 人成在线视频| 国产精品一二三在线观看| 中文字幕免费观看| 欧美xxxx三人交性视频| 欧美日韩在线视频一区二区三区| 国产一级18片视频| 中文字幕第17页| 在线电影av| 69堂精品视频在线播放| 678在线观看视频| 欧美大片免费播放器| 欧美特级xxxxbbbb毛片| 亚洲精品少妇久久久久久| yw视频在线观看| 精品爽片免费看久久| 欧美精品免费在线| 99爱视频在线| 日本高清不卡一区二区三| 偷窥国产亚洲免费视频| 国产亚洲精品激情久久| www..com久久爱| 欧美日韩亚洲一区在线观看| 潘金莲一级黄色片| 成年在线播放小视频| 亚洲黄色免费三级| 国产av国片精品| 9l国产精品久久久久麻豆| 欧美在线观看你懂的| 在线视频手机国产| 成人毛片高清视频观看| 亚洲三区视频| y97精品国产97久久久久久| 黑鬼大战白妞高潮喷白浆| 在线观看毛片视频| 久久久久久网| av福利导福航大全在线播放| 9l视频自拍九色9l视频成人| 一本在线高清不卡dvd| 视频一区二区三区在线看免费看| 久久青草精品视频免费观看| 三日本三级少妇三级99| 中文字幕日韩久久| bbbbbbbbbbb在线视频| 一区二区三区四区视频免费观看| 亚洲天堂自拍偷拍| 六月婷婷一区| 制服丝袜影音| 在线观看成人动漫| 国产一区一区三区| 亚洲国产精品视频在线观看| 亚洲高清中文字幕| 中文字幕一区二区久久人妻| 成人看片app| 亚洲插插视频| 亚洲久久久久久久| 97精品国产露脸对白| 欧美videossex另类| 成人综合影院| 欧美日韩性在线观看| 婷婷视频一区二区三区| 欧美18—20岁hd第一次| 国产午夜精品无码一区二区| 亚洲最新合集| 91看片淫黄大片一级在线观看| 青春草在线视频| 成人一区视频| 国产美女撒尿一区二区| 2021国产精品久久精品| 四虎成人免费电影| 好了av在线| 国产精品免费一区| 午夜写真片福利电影网| 99re8这里只有精品| 老司机久久精品| 不卡av播放| 91欧美视频网站| 免费特级黄色片| 国产精品日韩在线播放| jizzjizzjizzjizz日本| 欧美午夜精品理论片a级大开眼界| 亚洲欧美日韩国产另类专区| 国产精品久久久久天堂| 伊人夜夜躁av伊人久久| 神马午夜精品91| 免费羞羞视频网站| 国产乱码精品一区二三赶尸艳谈| 久久国产日本精品| 亚洲欧美日韩国产一区二区| 免费看国产片在线观看| 亚洲成人精品一区二区| 中文字幕欧美日韩一区二区| 日日嗨av一区二区三区四区| 欧美一区二区啪啪| 国产精品偷乱一区二区三区| 又黄又爽在线观看| 色视频免费版高清在线观看| 欧美激情91| 欧美日韩国产精品一区二区三区四区| 伦伦影院午夜理论片| 蜜臀av一级做a爰片久久| 欧美黄色免费网址| 91精品国产乱码| 亚洲综合激情小说| 国产欧美精品久久久| 91中文字幕在线视频| 4480yy私人影院高清不卡| 亚洲8888| 快播日韩欧美| 国产精品视频一区二区三区综合| 久久综合久久综合久久| 亚洲国产aⅴ精品一区二区| 美女av一区| 在线观看黄色片| 欧美激情在线免费| 国产精品久久久久久无人区| 91pron在线| 色一情一伦一子一伦一区| 丁香六月久久综合狠狠色| jizz免费视频| 欧美日韩在线亚洲一区蜜芽| 黄色欧美成人| 欧美精品aⅴ在线视频| 日本成熟性欧美| 日韩精品中文字幕视频在线| 亚洲а∨天堂久久精品2021| 可以免费观看的毛片| 免费黄色在线视频网站| 日本一区二区动态图| 免费网站在线高清观看| 欧美男男激情videos| 成人av中文| 欧美一区三区四区| 一卡二卡三卡亚洲| 女同激情久久av久久| 国产一区免费视频| 老熟妇高潮一区二区三区| 亚洲精品不卡在线| 欧美日韩在线观看首页| 欧美三级中文字幕| 成人国产精品免费视频| 自拍自偷一区二区三区| 成人欧美一区二区三区在线观看| 亚洲小说区图片区情欲小说| 国内视频一区二区| 亚洲日本中文字幕在线| 三级a性做爰视频| 亚洲精品激情视频| 亚洲天堂2018av| 91网站在线看| 激情图片在线观看高清国产| 亚洲高清一二三区| 538在线视频| 国产91在线免费| 欧美日韩国产123| 看全色黄大色大片免费久久久| 51vv免费精品视频一区二区| 亚洲精品国产精品久久| 四虎成人精品永久免费av九九| 成人羞羞网站入口免费| 超碰在线中文| 有色激情视频免费在线| 成人在线观看网站| 久草福利视频在线| 亚洲制服一区| 色综合天天综合网中文字幕| eeuss在线播放| 99在线热播精品免费| 精品xxxxxbbbb欧美中文| 国产精品一区二区免费不卡| 久久久久久久电影一区| 香蕉av一区二区三区| 人妻久久一区二区| 38少妇精品导航| v天堂福利视频在线观看| 欧美极品另类videosde|