爬取目标站点时Chrome Driver超时、BeautifulSoup处理过慢如何解决
网页爬取超时/加载过慢解决方案
1 优化requests基础请求参数
- 必须携带完整的浏览器请求头,重点包含
User-Agent、Accept、Accept-Encoding、Connection等字段,避免被反爬策略拦截导致挂起或无响应,同时提前请求首页获取基础cookie,适配多数站点的cookie校验规则,示例代码如下:
import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1" } session = requests.Session() # 先请求首页获取基础cookie session.get("https://rock30games.com", headers=headers, timeout=10) # 再请求目标查询接口 resp = session.get("https://rock30games.com/results?depts=&store=&description=&upc=&action=SEARCH", headers=headers, timeout=20)
- 若页面返回内容体积过大,开启流式响应避免一次性加载全部内容,降低内存占用提升处理速度,调用方式为
resp = session.get(url, headers=headers, stream=True, timeout=20)
2 优化BeautifulSoup解析效率
- 不需要解析整个页面所有节点,先直接定位到你需要提取数据的目标DOM区域,再做后续处理,避免遍历全页无用节点
- 优先使用
lxml解析器,比默认的html.parser解析速度快3-5倍,安装lxml库后调用时指定即可:soup = BeautifulSoup(resp.text, 'lxml') - 如果目标数据是内嵌在页面JS代码中渲染的,不需要解析DOM,直接用正则匹配提取JS里的结构化JSON数据,效率会提升10倍以上
3 批量爬取可选异步加速方案
如果需要爬取多个分页的查询结果,可以用异步请求库aiohttp替换requests,并发请求能大幅降低整体耗时,单请求的响应速度也优于同步请求。
4 Chrome Driver超时问题修复方案
如果必须使用浏览器渲染的方式爬取,做以下配置优化即可解决超时问题:
- 开启无头模式,禁用GPU、图片、CSS等非必要资源加载,同时配置页面加载策略为
eager,仅等待DOM树加载完成就执行后续操作,无需等待静态资源加载完成,示例代码如下:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.page_load_strategy = 'eager' chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--blink-settings=imagesEnabled=false") chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") driver = webdriver.Chrome(options=chrome_options) driver.set_page_load_timeout(30)
- 如果目标数据不需要JS渲染,可额外添加
chrome_options.add_argument("--disable-javascript")配置进一步提升加载速度。
内容的提问来源于stack exchange,提问作者YaAli Coder
相关产品推荐
相关产品推荐

