使用Python Selenium解析allegro.pl遭反爬拦截的问题求助
问题描述
需要编写allegro.pl的解析器,检查2000个商品链接的库存状态,但该网站反爬防护极强。使用Selenium并配置代理后,仅1-2次迭代IP就被封禁或触发验证码,最终完全无法访问。
核心代码实现
import time from bs4 import BeautifulSoup import exel import zipfile from selenium import webdriver from selenium_stealth import stealth LINK_IMG_ERROR = 'https://assets.allegrostatic.com/metrum/icon/stop-sign-92284fffce.svg' PROXY_HOST = '' PROXY_PORT = 8000 # Your proxy port PROXY_USER = '' PROXY_PASS = '' NORMAL_STATUS_CODE = 200 headers = ({ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15', 'Accepts': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', }) manifest_json = """ { "version": "1.0.0", "manifest_version": 2, "name": "Chrome Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", "<all_urls>", "webRequest", "webRequestBlocking" ], "background": { "scripts": ["background.js"] }, "minimum_chrome_version":"76.0.0" } """ background_js = """ let config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "%s", port: parseInt(%s) }, bypassList: ["localhost"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "%s", password: "%s" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: ["<all_urls>"]}, ['blocking'] ); """ % (PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS) def get_chromedriver(use_proxy=False, headers=None): options = webdriver.ChromeOptions() if use_proxy: plugin_file = 'proxy_auth_plugin.zip' with zipfile.ZipFile(plugin_file, 'w') as zp: zp.writestr('manifest.json', manifest_json) zp.writestr('background.js', background_js) options.add_extension(plugin_file) options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) options.add_argument(f'--user-agent={headers}') driver = webdriver.Chrome('chromedriver', options=options) stealth( driver, languages=["en-US", "en"], vendor="Google Inc.", platform="Win64", webgl_vendor="Intel Inc.", renderer="Intel Iris OpenGL Engine", fix_hairline=True, ) return driver def check_stock_selenium(driver, url_list): list_link_error = [] try: for url in url_list: driver.get(url=url) time.sleep(3) html = driver.page_source soup = BeautifulSoup(html, 'lxml') stock_info = soup.find_all('img', {"class": "meqh_en msa3_z4 mhd5_0m ivrkk m0s5_fg m0t1_7i mse2_56 mg9e_0 mj7a_0 mh36_0 mvrt_16 mvrt_24_l mpof_z0 mjyo_lo"}) if len(stock_info) > 0 and stock_info[0].get_attribute_list('src') == LINK_IMG_ERROR: list_link_error.append(url) finally: driver.quit() if len(list_link_error) > 0: return True else: return False def main(): driver = get_chromedriver(use_proxy=True, headers='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36') result = check_stock_selenium(driver, exel.get_data('my_spreadsheet.xlsx')) driver.close() driver.quit() if __name__ == '__main__': main()
解决方向与建议
代理层优化
- 放弃固定代理,改用高匿动态住宅代理,每次请求切换IP,避免IP被快速拉黑;
- 验证代理质量,确保代理IP未被allegro.pl列入黑名单,优先选择稳定的付费代理服务;
- 每次启动浏览器实例时更换代理,而非复用同一代理处理所有请求。
行为模拟优化
- 替换固定
time.sleep(3)为随机延迟,比如random.uniform(2, 6),模拟真实用户的浏览间隔; - 添加随机操作:如滚动页面、随机点击页面空白区域、悬停元素等,避免机械性的请求行为;
- 分批次处理链接,每处理10-20个链接后,暂停5-10分钟,再切换IP继续;
- 避免连续请求同一域名下的资源,可穿插其他低风险请求打破请求规律。
- 替换固定
反检测增强
- 改用
undetected-chromedriver替代原生ChromeDriver,它默认会隐藏大部分自动化特征; - 完善stealth配置:添加
run_on_insecure_origins=True,调整webgl_vendor和renderer为随机值,避免固定指纹; - 添加Chrome启动参数:
--disable-blink-features=AutomationControlled,彻底禁用navigator.webdriver特征; - 维护User-Agent池,每次启动浏览器或请求时随机选择UA,避免固定标识。
- 改用
解析逻辑优化
- 优先使用Selenium原生定位方法(如
driver.find_element)获取库存元素,减少BeautifulSoup解析的开销; - 抓包分析网站API:查看是否有直接返回库存状态的接口,直接请求API比渲染整页更高效,也更难被反爬检测;
- 用
WebDriverWait等待库存元素加载完成,而非固定延迟,避免过早解析页面。
- 优先使用Selenium原生定位方法(如
验证码与封禁处理
- 集成自动打码服务应对触发的验证码;若验证码出现频繁,暂停当前IP的使用,切换新IP后再继续;
- 当检测到IP被封禁时,立即切换代理,并延长暂停时间,避免短时间内重复触发封禁机制。
合规性检查
- 查看allegro.pl的
robots.txt和服务条款,确保爬取行为符合网站规定,避免法律风险。
- 查看allegro.pl的
内容的提问来源于stack exchange,提问作者Horizon
相关产品推荐
相关产品推荐

