学期: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网页登录的状态Tokenimport requestsfrom bs4 import BeautifulSoupimport reimport csvimport 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访问是否超出网站限制等,在进行网站爬取时,需要注意网站的反爬机制,并使用相对应的反反爬,最终得到数据。
