從一次爬蟲案例談談異常處理與多執行緒的重要性

2021-09-26 06:55:42 字數 2417 閱讀 1521

# -*- coding: utf-8 -*-

import random

import time

from pil import image

import requests

from pyquery import pyquery as pq

class all_in_one:

def __init__(self):

self.image_name = 1

self.image_suffix = '.jpeg'

self.has_download_img = set()

self.download_url = set()

self.base = 'd:\pycharmworkplace\head_images_spider\imgs'

for i in range(2,1000):

self.download_url.add('' + str(i) + '.html')

print('初始化完成')

time.sleep(t) # 暫停t秒試一下

try:

data = requests.get(download_url, headers=self.headers).content

except exception as e:

print(e)

return

with open(filename, 'wb') as f:

f.write(data)

if (self.is_valid_image(filename)):

self.image_name += 1

self.has_download_img.add(download_url)

else:

for i in range(0, 5): #最多重試5次,5次都失敗了就放棄

t = random.randint(30, 50)

time.sleep(t) # 暫停t秒試一下

try:

data = requests.get(download_url, headers=self.headers).content

except exception as e:

print(e)

return

with open(filename, 'wb') as f:

f.write(data)

if (self.is_valid_image(filename)):

self.image_name += 1

break

# 判斷是否損壞

def is_valid_image(self, filename):

valid = true

try:

image.open(filename).load()

except oserror:

valid = false

return valid

def download_one_page(self, url):

try:

response = requests.get(url, headers=self.headers)

except exception as e:

print(e)

time.sleep(10)

return

print('請求頁面' + url + '成功.....')

t = random.randint(20, 60)

time.sleep(t)

doc = pq(response.text)

for item in doc('img.lazy').items():

self.download_img(url=item.attr('src'))

def download_page(self):

for url in self.download_url:

self.download_one_page(url)

if __name__ == '__main__':

aio = all_in_one()

aio.download_page()

從本次的過程中,深刻的認識到了在乙個健壯的程式中異常處理的重要性,以及多執行緒的威力。

記錄一次自己爬蟲的案例

簡單來講,爬蟲就是乙個探測機器,它的基本操作就是模擬人的行為去各個 溜達,點點按鈕,查查資料,或者把看到的資訊揹回來。就像乙隻蟲子在一幢樓裡不知疲倦地爬來爬去。你可以簡單地想象 每個爬蟲都是你的 分身 就像孫悟空拔了一撮汗毛,吹出一堆猴子一樣。博主之前先提前安裝的anaconda3 pip inst...

通達OA 一次系統異常問題處理

前些天,伺服器硬碟出現故障,更換了2塊硬碟。可是最近幾天cpu占用一直很高,有時都接近100 而且有2個oa的服務也啟動不了,乙個mq,乙個redis 而且系統執行也不正常 併發的流程只能乙個人收到 郵件只能乙個人收到,其他人顯示都是已刪除郵件 修改人員資訊後這個人就變成離職狀態不能登入了。種種的異...

記一次處理IE引起的上網異常處理

win7 64bit系統,ie 11 出問題。在更新記錄裡找不到ie11的更新項,也就無法通過正常解除安裝了。而網上的各種折騰解除安裝方式均宣告無效。後來無意間找到了一款國外大神開發的軟體 removeie,確實很好用 卸完之後回到了ie8,但又出了新的問題。64位ie能上網了,32位ie就上不了 ...