喂,各位正在数据海洋里挣扎的爬虫爱好者们!是不是经常遇到这种情况——你兴冲冲写好了爬虫代码,结果网站反手就给你甩了个“请登录后再访问”?别慌,今天咱们要聊的这个神器,能让你像拥有了网站VIP通行证一样,它就是Cookie!
为什么你的爬虫总被当成“陌生人”?
想象一下这个场景:你第一次去家门口的水果店,老板对你爱答不理。但如果你天天去,每次去都买点东西,老板很快就会记住你,甚至给你留最新鲜的水果。Cookie就是爬虫世界的“熟客证明”。
每次你在网站登录,服务器都会在你的浏览器里塞个小纸条(Cookie),上面写着:“此人是VIP,可以放行”。而你的爬虫如果空着手去,服务器一看:“哪来的生面孔?滚粗!”
手把手教你“偷渡”Cookie
第一招:手动复制大法(新手必看)
这个方法简单到令人发指,适合刚入门的小白。
步骤1:登录网站
用你的Chrome、Firefox或者Edge,正常登录目标网站。比如咱们以豆瓣为例,先手动输入账号密码登录。
步骤2:打开开发者工具
按F12,找到Network(网络)标签。这时候刷新下页面,你会看到一堆请求。
步骤3:找到Cookie
点击任意一个请求,在Headers(请求头)里找到Cookie:那一长串看起来像乱码的东西。全选,复制!
步骤4:塞给爬虫
在你的Python代码里这样用:
import requests
# 把你复制的Cookie贴在这里
cookies = {
'dbcl2': '"你的cookie值"',
'bid': '你的bid值',
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
# 现在你可以畅通无阻地访问了!
response = requests.get('https://www.douban.com/people/你的ID/',
cookies=cookies,
headers=headers)
print(response.text[:500]) # 打印前500字符看看效果
适用场景:偶尔抓一两个页面,不想折腾的时候。
缺点:Cookie会过期,过期了就得重新复制,麻烦!
第二招:自动登录流(进阶必备)
老是手动复制太low了,咱们来点高级的——让爬虫自己学会登录。
import requests
from bs4 import BeautifulSoup
# 创建一个会话,会自动管理Cookies
session = requests.Session()
# 先访问登录页面获取必要参数
login_url = 'https://accounts.douban.com/j/mobile/login/basic'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
'Origin': 'https://accounts.douban.com',
'Referer': 'https://accounts.douban.com/passport/login?source=main'
}
# 准备登录数据
data = {
'name': '你的账号',
'password': '你的密码',
'remember': 'false'
}
# 发起登录请求
response = session.post(login_url, data=data, headers=headers)
print('登录结果:', response.json())
# 登录成功后,session自动保存了Cookie,可以直接访问其他页面
profile_response = session.get('https://www.douban.com/people/你的ID/')
print('访问个人主页:', '成功' if '我的豆瓣' in profile_response.text else '失败')
这个方法的好处是,一旦登录成功,session会帮你自动维护Cookie状态,就像真实的浏览器一样。
第三招:Selenium大法(终极武器)
有些网站登录过程复杂,各种验证码、滑动验证,这时候就需要请出我们的大杀器——Selenium。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
# 设置Chrome选项
chrome_options = Options()
chrome_options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36')
# 启动浏览器
driver = webdriver.Chrome(options=chrome_options)
try:
# 访问登录页面
driver.get('https://www.douban.com')
# 点击登录按钮
login_btn = driver.find_element_by_xpath('//div[@class="account-form"]//a[contains(text(),"登录")]')
login_btn.click()
time.sleep(2)
# 切换到账号密码登录
switch_btn = driver.find_element_by_class_name('account-tab-account')
switch_btn.click()
time.sleep(1)
# 输入账号密码
username = driver.find_element_by_id('username')
password = driver.find_element_by_id('password')
username.send_keys('你的账号')
password.send_keys('你的密码')
# 点击登录
submit_btn = driver.find_element_by_xpath('//a[contains(@class,"btn-account")]')
submit_btn.click()
time.sleep(3)
# 登录成功后,获取Cookies
cookies = driver.get_cookies()
print('获取到的Cookies:', cookies)
# 现在你可以用这些Cookies配合requests使用了
cookie_dict = {cookie['name']: cookie['value'] for cookie in cookies}
# 使用requests继续爬取,享受速度与激情
with requests.Session() as s:
s.headers.update({'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36'})
for cookie in cookies:
s.cookies.set(cookie['name'], cookie['value'])
response = s.get('https://www.douban.com/people/你的ID/')
print('最终结果:', '成功' if '我的豆瓣' in response.text else '失败')
finally:
driver.quit() # 记得关闭浏览器
Selenium的牛逼之处在于,它真的控制了一个浏览器,什么JavaScript渲染、复杂交互都不在话下。
实战:完整的豆瓣数据爬取示例
来,咱们整合一下刚才学的内容,搞个完整的例子:
import requests
from selenium import webdriver
import time
import json
class DoubanSpider:
def __init__(self):
self.session = requests.Session()
self.session.headers.update({
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36'
})
def login_with_selenium(self):
"""使用Selenium登录并获取Cookies"""
print("🚀 启动浏览器登录...")
driver = webdriver.Chrome()
try:
driver.get('https://www.douban.com')
time.sleep(3)
# 这里根据实际情况调整选择器
switch_btn = driver.find_element_by_class_name('account-tab-account')
switch_btn.click()
time.sleep(1)
username = driver.find_element_by_id('username')
password = driver.find_element_by_id('password')
username.send_keys('你的账号')
password.send_keys('你的密码')
submit_btn = driver.find_element_by_xpath('//a[contains(@class,"btn-account")]')
submit_btn.click()
time.sleep(5)
# 检查登录是否成功
if 'douban.com' in driver.current_url:
cookies = driver.get_cookies()
# 将cookies设置到session中
for cookie in cookies:
self.session.cookies.set(cookie['name'], cookie['value'])
print("✅ 登录成功!")
return True
else:
print("❌ 登录失败")
return False
finally:
driver.quit()
def get_user_info(self, user_id):
"""获取用户信息"""
url = f'https://www.douban.com/people/{user_id}/'
response = self.session.get(url)
if response.status_code == 200:
# 这里可以用BeautifulSoup解析页面获取具体信息
if '我的豆瓣' in response.text:
print(f"✅ 成功获取用户 {user_id} 的信息")
# 实际开发中这里应该解析页面提取具体信息
return True
else:
print(f"❌ 获取用户信息失败,状态码: {response.status_code}")
return False
def get_movie_ratings(self, user_id):
"""获取用户电影评分"""
url = f'https://movie.douban.com/people/{user_id}/collect'
response = self.session.get(url)
if response.status_code == 200:
print("✅ 成功获取电影评分")
# 解析电影评分信息
return self.parse_movie_ratings(response.text)
return []
def parse_movie_ratings(self, html):
"""解析电影评分页面"""
# 这里简化处理,实际应该用BeautifulSoup解析
# 返回模拟数据
return [
{'电影': '肖申克的救赎', '评分': 5, '时间': '2023-01-01'},
{'电影': '阿甘正传', '评分': 4, '时间': '2023-01-15'}
]
# 使用示例
if __name__ == "__main__":
spider = DoubanSpider()
# 登录
if spider.login_with_selenium():
# 获取用户信息
spider.get_user_info('你的ID')
# 获取电影评分
ratings = spider.get_movie_ratings('你的ID')
print("🎬 你的电影评分:", ratings)
爬虫老司机的经验之谈
坑点1:Cookie会过期
别以为拿到Cookie就能一劳永逸。Cookie是有生命周期的,短的几小时,长的几个月。你的代码里要有重试机制,发现Cookie失效就重新登录。
坑点2:User-Agent要配套
你拿着Chrome的Cookie,却用Python默认的User-Agent去访问,这不是明摆着告诉服务器“我是爬虫”吗?记得保持一致性。
坑点3:注意Cookie的作用域
Cookie有domain和path属性,别把给A网站的Cookie用在B网站上,那样肯定不行。
最佳实践:
- 定期更新Cookie
- 使用会话(Session)保持状态
- 添加适当的延时,别把服务器搞崩了
- 遵守robots.txt,做个有道德的爬虫玩家
结语:Cookie是你的爬虫通行证
掌握了Cookie的使用,你的爬虫就从“流浪汉”升级成了“有身份证的公民”。无论是简单的复制粘贴,还是高级的自动登录,或者是Selenium的降维打击,总有一款适合你。
记住,爬虫的世界里,Cookie就是那张“芝麻开门”的魔法咒语。用好它,数据世界的大门将为你敞开!
(本文所有代码示例仅供参考,请遵守网站爬虫协议,合理使用爬虫技术。)
爬虫中使用Cookie的技巧
8万+

被折叠的 条评论
为什么被折叠?



