在Python中,使用多线程处理爬虫异常时,可以使用concurrent.futures.ThreadPoolExecutor
和try-except
语句。以下是一个简单的示例:
import requests from bs4 import BeautifulSoup from concurrent.futures import ThreadPoolExecutor, as_completed def fetch(url): try: response = requests.get(url) response.raise_for_status() return BeautifulSoup(response.text, 'html.parser') except requests.exceptions.RequestException as e: print(f"Error fetching {url}: {e}") return None def parse(url): soup = fetch(url) if soup: # 在这里解析网页内容,例如提取数据 pass def main(): urls = [ "https://example.com/page1", "https://example.com/page2", "https://example.com/page3", # 更多URL... ] with ThreadPoolExecutor(max_workers=5) as executor: futures = {executor.submit(parse, url): url for url in urls} for future in as_completed(futures): url = futures[future] try: future.result() except Exception as e: print(f"Error processing {url}: {e}") if __name__ == "__main__": main()
在这个示例中,我们首先定义了一个fetch
函数,用于获取网页内容。我们使用try-except
语句捕获可能的异常,例如网络错误或HTTP错误。
接下来,我们定义了一个parse
函数,用于解析网页内容。在这个函数中,我们调用fetch
函数并处理可能的异常。
在main
函数中,我们使用ThreadPoolExecutor
创建一个线程池,并将parse
函数提交给线程池。我们使用as_completed
函数遍历已完成的任务,并捕获可能的异常。
这样,我们可以确保在多线程环境下处理爬虫异常。