爬虫之解决需要登录的网站

本文介绍了使用Python进行网络爬虫时如何处理需要登录的网站。通过Session、Cookies和Selenium三种方式实现用户登录状态的保持,从而能够抓取登录后才能访问的数据。详细步骤包括设置User-Agent、发送POST请求登录、使用Cookies保存登录信息以及利用Selenium模拟浏览器操作。

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

爬虫之解决需要登录的网站

💬前言:平时爬取的网站大都不需要登录就可直接获取到想要的信息,但有时我们想要的信息,需要登录之后,才可以查看,又或者说,有些网站在不登录的状态下,不能查看全部信息,因此,我们需要携带用户数据进行登入爬取。文章中介绍了三种方法解决携带登入用户进行爬取网页信息。

第一种、使用Session

会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie。

import requests
from fake_useragent import UserAgent

s = requests.Session()
headers = {
    'User-Agent': UserAgent().random,  # 使用第三方库生成的随机UA
    'Referer': 'https://accounts.douban.com/',  # 添加防盗链,这个因网站而异
}
# 登入URL
login_url = 'https://accounts.douban.com/j/mobile/login/basic'
# 请求login_url地址的请求体
form_data = {
    'ck': '',
    'remember': 'true',
    'name': '10086100861',
    'password': '123123123',
}
res = s.post(login_url, headers=headers, data=form_data)
print(res.text)
print('-' * 100)
# 目标URL
url = 'https://www.douban.com/'
response = s.get(url, headers=headers)  # 此时的session携带了前一次请求的用户登入信息(会话保持),这样请求目标URL就携带了登录用户信息
print(response.text)  # 获取目标URL站点信息

响应结果
在这里插入图片描述

第二种、使用Cookies

使用Cookie方便是方便,但Cookie是服务端给你的,它是有过期时间的,如果过期了,那你的身份信息也就无效了,需要重新登入获取了。

第一步,在网站中复制一个已登录用户的Cookie;
在这里插入图片描述

第二步,将已登录用户的Cookie放到headers中进行请求;

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
    'Cookie': 'bid=YGf9713XbE4; dou<...cookies太长了,这里写文章,省略掉...>_num=5',
    'Referer': 'https://accounts.douban.com/',
}
# 目标URL
url = 'https://www.douban.com/'
response = requests.get(url, headers=headers)
print(response.text)

响应结果
在这里插入图片描述

第三种、使用Selenium

对Selenium不是很熟悉的同学可以看看我之前的文章《10分钟带你搞定Selenium》

就是模拟人的动作进行输入账号密码登入,获取网页信息

import time
from selenium import webdriver

driver = webdriver.Chrome(executable_path='./chromedriver.exe')  # 打开浏览器
driver.get("https://www.douban.com/")  # 打开网站
driver.switch_to.frame(0)  # 切换frame  参数‘0’表示切换第一个frame
btn = driver.find_element_by_class_name('account-tab-account')  # 定位密码登录按钮
btn.click()  # 点击它
btn_username = driver.find_element_by_id('username')  # 定位账号标签
btn_username.send_keys('10086100861')  # 填充账号
time.sleep(1)  # 休息下,男人不能太快了
btn_password = driver.find_element_by_id('password')  # 定位密码标签
btn_password.send_keys('123123123')  # 填充密码
time.sleep(1)
btn_login = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a')
btn_login.click()  # 点击登录按钮
time.sleep(3)
page_str = driver.page_source  # 获取页面数据
print(page_str)
driver.close()  # 关闭浏览器

响应结果
在这里插入图片描述


新手小白,代码写得不好,如果有理解错误的,还望大牛在评论区指出来,非常感谢!

以上就是 解决需要登录的网站 的所有内容了,点赞收藏加评论是最大的支持哦!

📑编写不易,转载请注明出处,如有侵权,请联系我,邮箱(896263973@qq.com)!!!

爬取网页内容时,有时可能会遇到乱码问题。下面是一些解决乱码问题的常见方法: 1. 确定网页编码:首先,需要确定网页的正确编码方式。可以查看网页的HTTP响应头中的Content-Type字段,或者通过网页源代码中的meta标签来获取。常见的编码方式有UTF-8、GBK、ISO-8859-1等。 2. 指定正确的编码方式:在使用Python爬虫时,可以通过指定正确的编码方式来解决乱码问题。例如,可以使用requests库发送网络请求时,通过设置`response.encoding`属性来指定编码方式,如`response.encoding = 'UTF-8'`。 3. 使用合适的解码方式:如果指定了正确的编码方式仍然无法解决乱码问题,可以尝试使用其他解码方式进行解码。可以使用Python的内置字符串方法`decode()`或者第三方库(如chardet)来进行解码。 4. 处理特殊字符:有时候,网页中可能包含一些特殊字符,如非法字符或HTML实体编码。可以使用第三方库(如html.parser)来对这些特殊字符进行处理,将它们转换为正常的文本。 5. 使用Unicode进行处理:如果以上方法仍然无法解决乱码问题,可以尝试将乱码文本转换为Unicode编码,并进行适当的处理。可以使用Python的`encode()`和`decode()`方法来进行编码和解码。 需要注意的是,乱码问题的解决方法因具体情况而异,可能需要根据实际情况进行调试和尝试不同的解决方案。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeBoy‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值