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

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

第一种、使用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)!!!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐