如何解决Requests+BeautifulSoup爬取需登录页面的登录状态问题?
问题原因
Selenium控制的浏览器和requests是完全独立的HTTP会话,浏览器登录后生成的登录Cookie只保存在浏览器的会话里,requests发起请求时没有携带这些Cookie,服务器会判定你未登录,所以返回登录页内容。
解决方案
有两种可行的解决办法:
方法一:从Selenium提取Cookie给requests用
登录成功后,把浏览器里的Cookie提取出来,放到requests的会话中,这样requests就能带着登录凭证请求页面了:
# 登录成功后执行 cookies = browser.get_cookies() # 初始化requests会话,并导入Cookie session = requests.Session() for cookie in cookies: session.cookies.set(cookie['name'], cookie['value']) # 用带Cookie的会话请求页面 current_page = browser.current_url r = session.get(current_page, headers=headers) soup = bs(r.text, "html.parser")
方法二:直接用Selenium获取页面源码
既然已经通过Selenium成功进入目标页面,没必要再用requests绕一圈,直接提取浏览器当前的页面源码给BeautifulSoup解析:
# 登录成功后直接获取页面源码 soup = bs(browser.page_source, "html.parser")
这种方法更简单,还能避免Cookie同步可能出现的问题。
内容的提问来源于stack exchange,提问作者Santos
相关产品推荐
相关产品推荐

