爬取某些网页时会出现因未登录或登录状态超时而自动转到登录界面,导致爬取信息失败。再次可使用保存cookie文件至本地并于每次爬取时导入cookie文件达到自动登录的目的(cookie文件可能会无效,需要再次保存。至少我爬取的网页每过一天需要重新保存次cookie文件。。。)
cookie是什么(引用,详情点击链接):
简单地说,cookie 就是浏览器储存在用户电脑上的一小段文本文件。cookie 是纯文本格式,不包含任何可执行的代码。一个 Web 页面或服务器告知浏览器按照一定规范来储存这些信息,并在随后的请求中将这些信息发送至服务器,Web 服务器就可以使用这些信息来识别不同的用户。大多数需要登录的网站在用户验证成功之后都会设置一个 cookie,只要这个 cookie 存在并可以,用户就可以自由浏览这个网站的任意页面。再次说明,cookie 只包含数据,就其本身而言并不有害。
准备工作:
命令行安装pickle
pip install pickle
保存cookie文件:
import pickle from selenium import webdriver chromePath = r'D:\Driver\chromedriver.exe' # chrome模拟浏览器 wd = webdriver.Chrome(executable_path= chromePath) # Chrome浏览器 wd.get(url) ''' 进行登录操作,输入用户名,密码,点击登录按钮 ''' pickle.dump(wd.get_cookies(), open("地址+cookie.pkl", "wb"))
登录操作参见:python+webdriver 模拟登陆
web使用cookie文件:
import pickle import selenium.webdriver chromePath = r'D:\Driver\chromedriver.exe' # chrome模拟浏览器 wd = webdriver.Chrome(executable_path= chromePath) # Chrome浏览器 driver.get(url) cookies = pickle.load(open("cookies.pkl", "rb")) for cookie in cookies: driver.add_cookie(cookie)
爬虫使用cookie文件:
import pickle import requests from selenium import webdriver url = '' cookies = pickle.load(open("cookie.pkl", "rb")) req = requests.Session() # 构建Session for cookie in cookies: req.cookies.set(cookie['name'],cookie['value']) # 转换cookies req.headers.clear() # 删除原始req里面标记有python机器人的信息 r = req.get(url) # 用req r.raise_for_status() r.encoding = r.apparent_encoding print(r.text)
参考链接:Python模拟登陆万能法-微博|知乎
How to save and load cookies using Python + Selenium WebDriver
请使用手机"扫一扫"x