学期:2021-2022学年第一学期
学 院 | 大数据与智能工程学院 | 年 级、 专 业、 班 | 18级数据科学与大数据技术(专升本)一班 | 姓 名 | 学号 | ||
---|---|---|---|---|---|---|---|
实验项目 名称 | Cookie的使用 |
实验学时: 3h 同组学生姓名: 王美琴、尤博欣、周青青、李昕辰 实验地点: 9317
实验日期: 实验成绩: 批改教师: 批改时间:
指导教师评阅:
- 实验目的:
- 使用Cookiejar处理Cookie,重现ChinaUnix的登陆,并完成登陆后下一界面的抓取。(使用教材案例提供的 用户名与密码)
- 以自己的手机号注册一个 ChinaUnix 账号 ,并参考案例2-1实现ChinaUnix的登陆以及完成登陆后下一界面的抓取(提示:使用Fiddler与代理工具Foxyproxy实现POST请求的抓取,并定位到真实的URL)
- 实验原理:requests请求、bs4网页解析
- 实验环境 :win10、python3.9、vscode、edge
- 实验步骤:
- http携带参数post请求登录获取用户token
- 携带token的cookise请求主页
- 保存主页数据
核心代码:
### 简单使用Cookie存储chinaunix网页登录的状态Token
import requests
from bs4 import BeautifulSoup
import re
import csv
import os
# 保存到文件
def saveContent(path, result, encoding):
with open(path, 'w', newline="", encoding=encoding) as f:
f.write(result)
if __name__ == "__main__":
# 确立目录
path = "./spider/test/code2_out"
if not os.path.exists(path):
os.makedirs(path)
# 构造请求
indexUrl = "http://bbs.chinaunix.net/"
loginUrl = "http://account.chinaunix.net/login/login"
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.47'
}
data = {'username': 'alphaae', 'password': 'login'}
# 请求login API并存储返回的Cookie(中的Token)
response = requests.post(loginUrl, data=data, headers=headers)
# 将返回的Cookie序列化为字典
cookies = requests.utils.dict_from_cookiejar(response.cookies)
for k, v in cookies.items():
print("{} : {}".format(k, v))
# 带Cookie请求bbs的Index页面
response = requests.get(indexUrl, headers=headers, cookies=cookies)
# 存储登录后的Index页面
saveContent(path + "/out_2.html", response.text, response.encoding)
- 实验结果及分析:
通过requests库提供POST方法请求登录接口,得到用户Token,携带包含用户Token的cookise再次请求主页,得到登陆后的主页数据,最后将登录后的主页数据保存。
- 实验总结:
在进行网页爬取时,网站会存在一些反爬机制,如:是否添加请求头、IP访问是否超出网站限制等,在进行网站爬取时,需要注意网站的反爬机制,并使用相对应的反反爬,最终得到数据。