代码的错误:

  • 第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)
Python爬虫代码错误修复及性能优化

原文地址: https://www.cveoy.top/t/topic/loLC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录