Python网页爬虫代码纠错及优化:高效提取关键词并处理异常
以下是对代码的纠错和改进:
-
需要导入
re模块,因为代码中使用了正则表达式。 -
在使用正则表达式前,需要将
html转换成字符串类型。 -
在使用线程池时,需要对异常进行处理,以避免程序崩溃。
-
在使用线程池时,应该将每个任务的结果保存起来,以便后续处理。
-
在使用线程池时,应该使用
as_completed函数,以便可以按照完成顺序处理结果。 -
在使用线程池时,应该使用进度条来显示处理进度。
改进后的代码如下:
import requests
import re
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor, as_completed
from tqdm import tqdm
url = input('请输入网页链接:')
keywords = input('请输入要查找的关键词,以逗号分隔:').split(',')
pattern = '|' . join(keywords)
regex = re.compile(pattern)
session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0'})
response = session.get(url, timeout=10)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
result = regex.search(str(html))
if result:
print(result.group())
links = soup.find_all('a')
results = []
with ThreadPoolExecutor(max_workers=10) as pool:
futures = [pool.submit(session.get, link.get('href'), timeout=10) for link in links if link.get('href').startswith('http')]
for future in tqdm(as_completed(futures), total=len(futures)):
try:
response = future.result()
sub_html = response.text
sub_results = regex.findall(sub_html)
results.extend(sub_results)
except Exception as e:
print(f'任务执行失败:{e}')
for result in results:
print(result)
原文地址: https://www.cveoy.top/t/topic/loMt 著作权归作者所有。请勿转载和采集!