今天的目標是為爬蟲過程添加日誌記錄和進度追蹤功能。
這些功能能夠幫助我在抓取大量數據時了解整體進度,並在出現錯誤時快速定位問題,原因是因為當處理成千上萬個基因數據時,這些工具能夠顯著提高開發效率和故障排查能力。
進度追蹤:當處理大規模數據時,使用進度條來顯示抓取進度是一種非常有效的方式。進度條能夠實時告知還有多少數據未被處理,幫助估算總共需要的時間。
from tqdm import tqdm
async def fetch_all_gene_pages(urls):
async with aiohttp.ClientSession() as session:
tasks = []
for url in tqdm(urls, desc="Fetching gene pages"):
tasks.append(fetch_gene_page(session, url))
pages = await asyncio.gather(*tasks)
return pages
在上面這段 Code 中,我使用了 tqdm
來顯示一個進度條,tqdm
是一個進度條工具,能夠快速集成到各種 Python 迴圈中;在這邊我將進度條與 aiohttp
非同步爬蟲結合,顯示當前抓取過程中的過程。
日誌記錄:此外我還設置了日誌記錄系統,記錄每個請求的結果,特別是出現錯誤的情況,這能夠幫助我在處理失敗的請求時,更快找到錯誤的源頭。
import logging
logging.basicConfig(filename='爬蟲日誌.log', level=logging.INFO, format='%(asctime)s - %(message)s')
async def fetch_gene_page(session, url, retries=3):
for attempt in range(retries):
try:
async with session.get(url, timeout=10) as response:
response.raise_for_status()
logging.info(f"Successfully fetched {url}")
return await response.text()
except (aiohttp.ClientError, aiohttp.http_exceptions.HttpProcessingError) as e:
logging.error(f"Error fetching {url}: {str(e)}")
if attempt < retries - 1:
await asyncio.sleep(2)
continue
else:
logging.error(f"Failed to fetch {url} after {retries} attempts.")
return None
在上面這段 Code 中我設置了日誌系統,並在每次請求成功或失敗時記錄相應的日誌訊息,這能夠幫助我在出現問題時快速定位錯誤。
進度條和日誌系統的引入,能夠顯著提升我的開發效率,特別是在處理大規模數據時,這些工具能夠讓我隨時掌握爬蟲的進展情況,並及時應對可能發生的問題。