学期:2021-2022学年第一学期

    学 院 大数据与智能工程学院 年 级、 专 业、 班 18级数据科学与大数据技术(专升本)一班 姓 名
    学号
    实验项目 名称 Cookie的使用

    实验学时: 3h 同组学生姓名: 王美琴、尤博欣、周青青、李昕辰 实验地点: 9317
    实验日期: 实验成绩: 批改教师: 批改时间:
    指导教师评阅:

    1. 实验目的:
      1. 使用Cookiejar处理Cookie,重现ChinaUnix的登陆,并完成登陆后下一界面的抓取。(使用教材案例提供的 用户名与密码)
      2. 以自己的手机号注册一个 ChinaUnix 账号 ,并参考案例2-1实现ChinaUnix的登陆以及完成登陆后下一界面的抓取(提示:使用Fiddler与代理工具Foxyproxy实现POST请求的抓取,并定位到真实的URL)
    2. 实验原理:requests请求、bs4网页解析
    3. 实验环境 :win10、python3.9、vscode、edge
    4. 实验步骤:
      1. http携带参数post请求登录获取用户token
      2. 携带token的cookise请求主页
      3. 保存主页数据

    核心代码:

    1. ### 简单使用Cookie存储chinaunix网页登录的状态Token
    2. import requests
    3. from bs4 import BeautifulSoup
    4. import re
    5. import csv
    6. import os
    7. # 保存到文件
    8. def saveContent(path, result, encoding):
    9. with open(path, 'w', newline="", encoding=encoding) as f:
    10. f.write(result)
    11. if __name__ == "__main__":
    12. # 确立目录
    13. path = "./spider/test/code2_out"
    14. if not os.path.exists(path):
    15. os.makedirs(path)
    16. # 构造请求
    17. indexUrl = "http://bbs.chinaunix.net/"
    18. loginUrl = "http://account.chinaunix.net/login/login"
    19. headers = {
    20. 'User-Agent':
    21. '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'
    22. }
    23. data = {'username': 'alphaae', 'password': 'login'}
    24. # 请求login API并存储返回的Cookie(中的Token)
    25. response = requests.post(loginUrl, data=data, headers=headers)
    26. # 将返回的Cookie序列化为字典
    27. cookies = requests.utils.dict_from_cookiejar(response.cookies)
    28. for k, v in cookies.items():
    29. print("{} : {}".format(k, v))
    30. # 带Cookie请求bbs的Index页面
    31. response = requests.get(indexUrl, headers=headers, cookies=cookies)
    32. # 存储登录后的Index页面
    33. saveContent(path + "/out_2.html", response.text, response.encoding)
    1. 实验结果及分析:

    通过requests库提供POST方法请求登录接口,得到用户Token,携带包含用户Token的cookise再次请求主页,得到登陆后的主页数据,最后将登录后的主页数据保存。

    1. 实验总结:

    在进行网页爬取时,网站会存在一些反爬机制,如:是否添加请求头、IP访问是否超出网站限制等,在进行网站爬取时,需要注意网站的反爬机制,并使用相对应的反反爬,最终得到数据。