使用LinkedIn Scraper爬取第二个账号触发MaxRetryError故障求助
LinkedIn爬虫多用户爬取连接拒绝问题解决
问题
使用linkedin_scraper结合Selenium爬取LinkedIn个人资料时,单用户爬取正常,但爬取第二个用户时触发urllib3.exceptions.MaxRetryError,提示本地端口连接被目标计算机拒绝,关闭防火墙后问题依旧。
相关代码
from linkedin_scraper import Person, actions from selenium import webdriver driver = webdriver.Chrome() email = "**" password = "-" actions.login(driver, email, password) person1 = Person("profile-url1", driver=driver) person2 = Person("profile-url2", driver=driver) print(person1.scrape()) print(person2.scrape())
报错信息
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=54805): Max retries exceeded with url: /session/b690bde405b447b7efc9ee7bbc19fd0a/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001766BF10BD0>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))
解决办法
- 添加请求间隔:LinkedIn反爬机制会拦截连续请求,直接导致驱动连接断开。在两次爬取之间加入延时:
import time print(person1.scrape()) time.sleep(10) # 间隔10秒再处理第二个用户,可根据情况调整时长 print(person2.scrape()) - 校验驱动状态:爬取第一个用户后,驱动可能被LinkedIn限制或意外断开,创建第二个Person对象前先检查驱动有效性:
# 检查driver是否还处于连接状态 try: driver.current_url except: # 重新初始化驱动并登录 driver.quit() driver = webdriver.Chrome() actions.login(driver, email, password) person2 = Person("profile-url2", driver=driver) - 延迟初始化爬取动作:创建Person对象时关闭自动爬取,之后手动依次执行,避免并发请求触发限制:
# 创建对象时不自动爬取 person1 = Person("profile-url1", driver=driver, scrape=False) person2 = Person("profile-url2", driver=driver, scrape=False) # 依次执行爬取并添加间隔 print(person1.scrape()) time.sleep(8) print(person2.scrape()) - 更新依赖库:旧版本的
linkedin_scraper、selenium或urllib3可能存在兼容性问题,更新到最新版本:pip install --upgrade linkedin_scraper selenium urllib3 - 配置浏览器反检测参数:添加浏览器配置,降低被识别为爬虫的概率,避免驱动被强制断开:
from selenium.webdriver.chrome.options import Options options = Options() # 无头模式可选,根据需求开启 options.add_argument('--headless=new') options.add_argument('--disable-blink-features=AutomationControlled') 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') options.add_argument('--no-sandbox') driver = webdriver.Chrome(options=options)
内容的提问来源于stack exchange,提问作者Max8
相关产品推荐
相关产品推荐

