爬虫—新浪微博(登陆访问、cookie访问)

本文介绍了一种微博爬虫实现方案,包括登录过程、获取Cookie及如何使用Cookie访问其他页面等内容。针对微博页面改动,特别介绍了获取有效Cookie的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、思路:

    登录 ====>进入指定页面 ====>获取cookie ====> 带cookie访问相关页面。

    注:貌似微博页面稍微改了一下:现在通过登录直接进入个人中心的过程中所获取的cookie不能用于访问其他页面,因此,才会在登陆后加一层进入指定页面用于获取可用的cookie。

二、代码:

1、登录并获取cookie(url:https://login.sina.com.cn/signup/signin.php?entry=sso)

    

2、cookie访问(demo)

    requests方式:


    scrapy方式:



### 解决微博Cookie失效问题 微博的Cookie机制设计使得`sub`字段尤为关键,该字段通常会在2至3天内过期,这期间如果未进行任何操作,则需要重新登录以更新Cookie[^1]。为了有效处理这一情况并维持持续访问权限,可以采取以下策略: #### 自动化刷新Token 实现自动化脚本定期执行登录动作,从而确保始终持有有效的Session Token。具体来说,在首次成功登录后应保存返回的Cookie数据,并设置定时任务每隔一段时间重复此过程。 ```python import requests from datetime import timedelta, datetime def login_weibo(): session = requests.Session() # 构建POST请求参数用于模拟登录表单提交 payload = { 'username': 'your_username', 'password': 'your_password' } response = session.post('https://login.sina.com.cn/sso/login.php', data=payload) if "success" in response.text: print("Login successful.") with open('cookies.txt', 'wb') as f: pickle.dump(session.cookies, f) def check_and_refresh_cookie(): try: last_login_time = get_last_login_timestamp() now = datetime.now() interval = (now - last_login_time).total_seconds() / 60 if interval >= 48 * 60: # 如果超过两天半则尝试刷新token login_weibo() update_last_login_timestamp(now) except Exception as e: print(f"Error occurred while checking/refreshing cookies: {str(e)}") check_and_refresh_cookie() ``` #### 使用持久化的存储方式管理Cookies 考虑到Python内置库`cookielib`提供了便捷的方法来加载和保存HTTP Cookies对象,建议采用这种方式代替简单的文件读写操作。对于更复杂的场景还可以考虑数据库或其他形式的外部服务来进行集中式的凭证管理和分发[^2]。 ```python cj = cookielib.LWPCookieJar() try: cj.load('my_cookies') except IOError: pass opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) urllib.request.install_opener(opener) response = opener.open(url) cj.save(filename='my_cookies') # 当检测到cookie即将到期时再次调用上述代码片段完成续签流程即可。 ``` #### 处理特定错误码或异常提示 当遇到类似于“cookie rejected”的警告信息时,应当仔细分析具体的响应头以及body内容,从中寻找可能存在的线索指向实际原因所在之处。例如可能是由于浏览器User-Agent不匹配或者是某些安全特性触发所致等问题[^5]。针对这类状况可以通过调整请求头部信息等方式加以规避。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值