zl程序教程

您现在的位置是:首页 >  后端

当前栏目

爬虫之cookie处理

爬虫Cookie 处理
2023-09-11 14:19:18 时间
  • 一般我们请求的时候,请求头的信息不够就会导致访问不成功
  • 在请求的时候有两个比较重要的信息cookiereferer

两个重要的信息

  • cookie携带着你的登录信息,如果我们登录之后有cookie,那么在请求的时候应该在请求头上携带cookie的信息
  • referer一般用来判断当前路径是不是由上一个路径进来的,一般做图片防盗链,他所表示的是上一个页面

网页编码

当我们进行爬虫的时候一定要注意网站网页的编码方式,然后进行解码

查看网页的编码

一般有些界面,特别是登录界面,他的编码方式与其他页面的编码方式不同

  1. 在浏览器的页面上面右击
  2. 选择查看网页源代码在这里插入图片描述
  3. 查看编码方式 在这里插入图片描述

例子

我们写一个微博的qq空间的数据爬取

一般我们打开一个url,他的请求表头都是我们需要的在这里插入图片描述

  1. 一般带冒号开口的都是我们不需要的数据,我们在定制请求头的时候可以直接删掉
  2. 一般也不需要accept-encoding,特别是gzip属性,他表示压缩,这样会导致我们进行解码时候的一些错误
import urllib.request

url = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/main_page_cgi?uin=2211986234&param=3_2211986234_0%7C8_8_2211986234_0_1_0_0_1%7C16&g_tk=609298747&g_tk=609298747'

headers = {
    'accept': '*/*',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cookie': '_ga=GA1.2.677263688.1626059546; pgv_pvid=3396846315; RK=cBzkAtK/7r; ptcz=28c2a5494b6158f2c08229ef9e241d2227d875e894727616ee46bc3ca856f0da; fqm_pvqid=4dd098fe-4ed0-4b40-9df4-0fbdcc0747bb; QZ_FE_WEBP_SUPPORT=1; cpu_performance_v8=0; __Q_w_s__QZN_TodoMsgCnt=1; tvfe_boss_uuid=9a642628d3ec3cfd; ptui_loginuin=2211986234; _qpsvr_localtk=0.37713367706254286; pgv_info=ssid=s8091044446; uin=o2211986234; skey=@LldMYGHaY; p_uin=o2211986234; pt4_token=N*0b5d5l8RdDISQm0nVue09kPQfMo*GUtvnrYkZd5d0_; p_skey=0XATmUfNk3J9AkBrlFHbnZhC9LgzsK62PnX39wlf0fg_; Loading=Yes; qz_screen=1536x864; 2211986234_todaycount=0; 2211986234_totalcount=7537',
    'referer': 'https://user.qzone.qq.com/2211986234/main',
    'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': "Windows",
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')

# 将数据保存到本地
with open('something.json', 'w', encoding='utf-8')as fp:
    fp.write(content)

通过上面的代码,我们可以拿到这个接口下的数据