Python爬虫代码错误修复及性能优化
代码的错误:
- 第7行的keywords列表中的两个字符串没有逗号分隔,需要加上逗号。
- 第20行的循环中使用了错误的变量名,应该是'pattern'而不是'regex'。
- 第21行的'result'应该是'sub_result',因为要查找子页面中的匹配结果。
代码的优化:
- 在第6行添加'requests.Session()'可以提高代码的运行速度,因为这样可以重复使用同一个TCP连接而不必每次都建立一个新的连接。
- 在第16行使用线程池可以并发地获取子页面,从而提高代码的运行速度。但是需要注意的是,线程池的最大线程数也不能过大,否则会产生过多的线程开销,反而会降低运行速度。
- 在第21行使用'if result:'可以提高代码的运行速度,因为如果匹配结果为空,就不必再执行后面的操作。
import re
import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor, as_completed
url = 'https://www.example.com/'
session = requests.Session()
response = session.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
keywords = ['{typePython{type', '爬虫']
pattern = '|' .join(keywords)
regex = re.compile(pattern)
for keyword in keywords:
result = soup.find_all(text=regex)
if result:
print(result)
links = soup.find_all('a')
pool = ThreadPoolExecutor(max_workers=10)
futures = []
for link in links:
href = link.get('href')
if href.startswith('http'):
futures.append(pool.submit(session.get, href))
for future in as_completed(futures):
sub_response = future.result()
sub_html = sub_response.text
sub_soup = BeautifulSoup(sub_html, 'html.parser')
sub_result = sub_soup.find_all(text=pattern)
if sub_result:
print(sub_result)
原文地址: https://www.cveoy.top/t/topic/loLC 著作权归作者所有。请勿转载和采集!