爬虫爬网站不免遇到需要登录的问题. 登录的时候可能还会碰到需要填验证码的问题, 有的验证码甚至是拖动拼图来完成的.
虽然现在这些都有开源解决方案, 但是假设现在只是自己做个小小的不具规模的爬虫来玩一玩; 或者主要的精力想要放在如何解析 html, 或者验证抓取算法上, 而不是通过登录验证上, 那么开源解决方案并不是最好的解决方案.
更好的方案是获取浏览器的 Cookies, 然后让 requests 这个库来直接使用登录好的 Cookies.
下面给出一个 get_chrome_cookies(url) 函数, 可以获取 Chrome 浏览器的 Cookies 信息. 程序在 Windows 下调试通过, 因为 C 盘需要特殊权限来读写文件, 因此程序先将 Cookies 数据库文件拷贝到 D 盘.
该方法用到了第三方库 win32crypt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| - import sqlite3
- import win32crypt
- import os
- def get_chrome_cookies(url):
- os.system(‘copy “C:\\Users\\Liu\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Cookies” D:\\python-chrome-cookies’)
- conn = sqlite3.connect(“d:\\python-chrome-cookies”)
- ret_list = []
- ret_dict = {}
- for row in conn.execute(“select host_key, name, path, value, encrypted_value from cookies”):
- if row[0] != url:
- continue
- ret = win32crypt.CryptUnprotectData(row[4], None, None, None, 0)
- ret_list.append((row[1], ret[1]))
- ret_dict[row[1]] = ret[1].decode()
- conn.close()
- os.system(‘del “D:\\python-chrome-cookies”‘)
- return ret_dict
复制代码
|
使用方法:
- x = requests.get(url, cookies = get_chrome_cookies(domain))
复制代码
文章出处: Jecvay Notes