在进行网站数据爬取时,有些网站需要登录才能访问需要的页面。为了避免每次都手动登录,可以使用cookie实现自动登录,在此介绍一下Python爬虫中使用cookie实现登录的方法。
1.生成cookie
首先,我们需要生成需要的cookie信息。下面是一个示例函数cookie_creat()
:
def cookie_creat(pc_name = pc_name[0]):
# 生成cook platform是投稿平台 pc_name是哪个pc
path = Service(Chrome_drv_path)
web = webdriver.Chrome(service=path)
web.get(Stock_url)
web.delete_all_cookies()
time.sleep(60)
dictcookies = web.get_cookies()
jsoncookies = json.dumps(dictcookies)
path_keyword = pc_name
search_path = os.path.join(os.getcwd(), "cookies")
doc_function.mkdir(search_path)
save_name = search_path + "\\" + path_keyword + ".txt"
with open(save_name, 'w') as f:
f.write(jsoncookies)
print('cookie is ok')
这里使用selenium
库中的webdriver
模块来实现模拟浏览器操作,并通过get_cookies()
方法获取登录后的cookie信息,再将其保存到本地文件中。其中,pc_name
参数表示需要登录的主机平台,Chrome_drv_path
为你电脑上Chrome浏览器驱动程序的路径,Stock_url
为需要登录的网站地址。doc_function.mkdir(search_path)是进行路径文件夹的创建,自己实现的
2.使用cookie
在获取到cookie信息之后,我们就可以通过cookie来登录所需的网站了。下面是一个示例函数cookie_use()
:
def cookie_use(pc_name = pc_name[0]):
path = Service(Chrome_drv_path)
web = webdriver.Chrome(service=path)
web.implicitly_wait(TIMEOUT/2)
web.get(Stock_url)
path_keyword = pc_name
search_path = os.path.join(os.getcwd(), "cookies")
cook_name = search_path + "\\" + path_keyword + ".txt"
if os.path.isfile(cook_name):
f = open(cook_name, 'r')
listcookie = json.loads(f.read())
for cookie in listcookie:
web.add_cookie(cookie)
return web
else:
return web
这里同样使用selenium
库中的webdriver
模块,首先打开需要登录的网站地址,然后读取本地cookie文件,将其中的cookie信息添加到浏览器中,最后返回一个已经登录的浏览器对象web
.
以上便是Python爬虫中使用cookie实现登录的方法。需要注意的是,每个网站的cookie信息都是不同的,如果要在其他电脑上使用已经保存的cookie信息,需要将其复制到对应目录下。同时,为了保证爬虫代码的稳定性和运行速度,建议使用多线程或异步编程方式。