欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

python爬蟲實(shí)戰(zhàn)之抓取異常的處理方法

這篇文章給大家分享的是有關(guān)python爬蟲實(shí)戰(zhàn)之抓取異常的處理方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計與策劃設(shè)計,南岸網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:南岸等地區(qū)。南岸做網(wǎng)站價格咨詢:13518219792

可能在抓取的時候,某個賬號突然就被封了,或者由于網(wǎng)絡(luò)原因,某次請求失敗了,該如何處理?對于前者,我們需要判斷每次請求返回的內(nèi)容是否符合預(yù)期,也就是看response url是否正常,看response content是否是404或者讓你驗(yàn)證手機(jī)號等,對于后者,我們可以做一個簡單的重試策略。處理這兩種情況的代碼如下

@timeout_decorator
def get_page(url, user_verify=True, need_login=True):
    """
    :param url: 待抓取url
    :param user_verify: 是否為可能出現(xiàn)驗(yàn)證碼的頁面(ajax連接不會出現(xiàn)驗(yàn)證碼,如果是請求微博或者用戶信息可能出現(xiàn)驗(yàn)證碼),否為抓取轉(zhuǎn)發(fā)的ajax連接
    :param need_login: 抓取頁面是否需要登錄,這樣做可以減小一些賬號的壓力
    :return: 返回請求的數(shù)據(jù),如果出現(xiàn)404或者403,或者是別的異常,都返回空字符串
    """
    crawler.info('本次抓取的url為{url}'.format(url=url))
    count = 0
 
    while count < max_retries:
 
        if need_login:
            # 每次重試的時候都換cookies,并且和上次不同,如果只有一個賬號,那么就允許相同
            name_cookies = Cookies.fetch_cookies()
            
            if name_cookies is None:
                crawler.warning('cookie池中不存在cookie,正在檢查是否有可用賬號')
                rs = get_login_info()
 
                # 選擇狀態(tài)正常的賬號進(jìn)行登錄,賬號都不可用就停掉celery worker
                if len(rs) == 0:
                    crawler.error('賬號均不可用,請檢查賬號健康狀況')
                    # 殺死所有關(guān)于celery的進(jìn)程
                    if 'win32' in sys.platform:
                        os.popen('taskkill /F /IM "celery*"')
                    else:
                        os.popen('pkill -f "celery"')
                else:
                    crawler.info('重新獲取cookie中...')
                    login.excute_login_task()
                    time.sleep(10)
 
        try:
            if need_login:
                resp = requests.get(url, headers=headers, cookies=name_cookies[1], timeout=time_out, verify=False)
 
                if "$CONFIG['islogin'] = '0'" in resp.text:
                    crawler.warning('賬號{}出現(xiàn)異常'.format(name_cookies[0]))
                    freeze_account(name_cookies[0], 0)
                    Cookies.delete_cookies(name_cookies[0])
                    continue
            else:
                resp = requests.get(url, headers=headers, timeout=time_out, verify=False)
 
            page = resp.text
            if page:
                page = page.encode('utf-8', 'ignore').decode('utf-8')
            else:
                continue
 
            # 每次抓取過后程序sleep的時間,降低封號危險
            time.sleep(interal)
 
            if user_verify:
                if 'unfreeze' in resp.url or 'accessdeny' in resp.url or 'userblock' in resp.url or is_403(page):
                    crawler.warning('賬號{}已經(jīng)被凍結(jié)'.format(name_cookies[0]))
                    freeze_account(name_cookies[0], 0)
                    Cookies.delete_cookies(name_cookies[0])
                    count += 1
                    continue
 
                if 'verifybmobile' in resp.url:
                    crawler.warning('賬號{}功能被鎖定,需要手機(jī)解鎖'.format(name_cookies[0]))
        
                    freeze_account(name_cookies[0], -1)
                    Cookies.delete_cookies(name_cookies[0])
                    continue
 
                if not is_complete(page):
                    count += 1
                    continue
 
                if is_404(page):
                    crawler.warning('url為{url}的連接不存在'.format(url=url))
                    return ''
 
        except (requests.exceptions.ReadTimeout, requests.exceptions.ConnectionError, AttributeError) as e:
            crawler.warning('抓取{}出現(xiàn)異常,具體信息是{}'.format(url, e))
            count += 1
            time.sleep(excp_interal)
 
        else:
            Urls.store_crawl_url(url, 1)
            return page
 
    crawler.warning('抓取{}已達(dá)到最大重試次數(shù),請在redis的失敗隊列中查看該url并檢查原因'.format(url))
    Urls.store_crawl_url(url, 0)
return ''

這里大家把上述代碼當(dāng)一段偽代碼讀就行了,主要看看如何處理抓取時候的異常。因?yàn)槿绻N整個用戶抓取的代碼,不是很現(xiàn)實(shí),代碼量有點(diǎn)大。

感謝各位的閱讀!關(guān)于python爬蟲實(shí)戰(zhàn)之抓取異常的處理方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

文章標(biāo)題:python爬蟲實(shí)戰(zhàn)之抓取異常的處理方法
本文來源:http://aaarwkj.com/article36/jegepg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google網(wǎng)站設(shè)計公司、營銷型網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
日日夜夜久久一二三区| 国产精品国产成人生活片| 亚洲和欧洲一码二码区视频| 日韩二区三区在线视频| 人人狠狠综合久久亚洲| 91精品国产高清久久福利| 伊人青草免费在线视频| 98精品偷拍视频一区二区三区| 亚洲激情中文字幕av网| 中文字幕日韩不卡顿一区二区 | 日韩一区二区三区av在线| 精品熟女少妇av免费久久野外| av二区不卡国产精品| 亚洲国产欧美日韩在线| 中文成人无字幕乱码精品| 亚洲熟妇精品一区二区三区| 大香蕉欧美视频伊在线| 日韩不伦高清一区二区三区| 免费国产黄片在线播放| 久久亚洲第一视频网站| 亚洲欧美日韩专区一区| 日本乱码中文字幕在线观看| 最美是你免费视频观看| 久久中文字幕一区二区三区| 欧美老熟妇精品一区二区| 亚洲精品污一区二区三区| 欧美一区二区三区日韩精品| 国产av剧情精品亚洲| 91久久精品国产一区| 日韩久久精品五月综合| 久久精品国产一区二区三| 久久精品亚洲欧美麻豆| 91麻豆精品国产自产| 精品毛片久久久久久久久| 久久久国产精品视频一区| 国产性做爰片免费视频| 国产成人公开免费视频| 精品人妻区二区三区蜜桃| 在线中文字幕日韩精品| 国产熟女一区二区三区正在| 日韩欧美国产精品加勒比|