03-requests模块携带UA请求头,携带参数,携带cookie,持久化存储

reques模块的基础使用方法

chrome浏览器使用方法了解新建隐身窗口的目的,了解chrome中network的使用

1,新建隐身窗口(无痕窗口
在这里插入图片描述
在这里插入图片描述

  • 浏览器中直接打开网站,会自动带上之前网站保存的cookie,但是在爬虫中首次获取页面是没有携带cookie的
  • 使用无痕窗口,首次打开网站,不会带上cookie,能够观察页面的获取情况,包括对方服务器如何设置cookie在本地
    2,chrome中network的更多功能
    在这里插入图片描述

携带请求头
在这里插入图片描述
在这里插入图片描述

携带请求参数
params 将字典或字节序列,作为参数添加到url中,get形式的参数
data 将字典或字节序列,作为参数添加到url中,post形式的参数
在这里插入图片描述
response响应对象

  • response.url 响应的url:有时候响应的url和请求的url并不一致
  • response.text 响应体 str类型
  • respones.content 响应体 bytes类型
  • response.status_code 响应状态码
  • response.request.headers 响应对应的请求头
  • response.headers 响应头
  • response.request.cookies 响应对应请求的cookie
  • response.cookies 响应的cookie(经过了set-cookie动作)
  • response.json() 自动将json字符串类型的响应内容转换为python对象(dict or list)
# -*- coding: utf-8 -*-
import requests # 调用requests模块

url = "https://www.baidu.com/s" # 目标网站url
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"

} #模仿浏览器UA头
params = {
    "ie":"utf-8",
    "f":"8",
    "tn":"baidu",
    "wd":"python"

}  # 携带的参数信息
response = requests.get(url=url,params=params,headers=headers) #发起get请求获取网页源码
print(response.text) # 打印获取到的数据  .text 表示网站源码中的str类型数据
with open("baidu.html","w",encoding="utf-8")as f:  # 持久化存储
    f.write(response.text)

爬取到的网站源码信息
在这里插入图片描述
爬取的结果展示
在这里插入图片描述
在这里插入图片描述
cookie:
- 是存储在客户端的一组键值对
- web中的cookie典型应用免密登录
- cookie和爬虫的关联:对一张页面进行请求的时候,如果请求的过程中不携带cookie的话,那么我们无法请求到正确的页面数据,因此cookie是爬虫中一个非常典型且常见的反爬机制。
代码展示

# -*- coding: utf-8 -*-
import requests



headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
    "Cookie":"_octo=GH1.1.502210902.1591416334; _ga=GA1.2.1767918695.1591416340; _device_id=8405b42c22b41f9661c91bb261f36773; user_session=A_QQWFoMfi0BySDXrcgL9xIX1kRxEMJ7Iq-J6NqRY5MRQe3H; __Host-user_session_same_site=A_QQWFoMfi0BySDXrcgL9xIX1kRxEMJ7Iq-J6NqRY5MRQe3H; logged_in=yes; dotcom_user=gemoumou; has_recent_activity=1; _gat=1; tz=Asia%2FShanghai; _gh_sess=2C%2BL%2FZjiXRtu1VCMWLaJK5z3qDteiGhOR%2F8hw5UDQusDnaKbsiQgYXX2a7w5DF%2FIeaCs45x%2FJ%2BvVWDPfHmihl%2BYZB%2FrUeUxQvQsoFkAw3sxWp9%2FcW5fzEjgxsgTp1SK91pCJZL%2BqkZ%2FjNbSg1p5CnlcLsQknfPPsyWb1udKZGjOmCO%2FsiOxHYeQh40VY2Cb4--ntjbQ3ClVbvtSvyq--zYhwrU5j4GhzntVvHo%2FoDA%3D%3D"
} #模仿浏览器UA头

url = "https://github.com/gemoumou"
response = requests.get(url=url,headers=headers).text

print(response)
with open('github.html','w',encoding='utf-8')as f:
    f.write(response)

未携带cookie在这里插入图片描述
携带cookie结果
在这里插入图片描述
携带cookie爬取的数据展示(已登录)
在这里插入图片描述
自动获取cookie
案例雪球网
分析:1,爬取的咨询信息是动态加载的:相关更多的咨询数据是动态加载的,鼠标滚轮滑动到底部的时候会动态加载出更多咨询数据。
2,定位到ajax请求的数据包,提取出请求url,相应数据为json形式的咨询数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码展示

# -*- coding: utf-8 -*-
import requests


headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"

} #模仿浏览器UA头

session = requests.Session() #创建session对象

main_url = "https://xueqiu.com"
# 第一次使用session捕获且存储cookie,猜测对雪球网首页发起请求可能会产生cookie
session.get(main_url,headers=headers)#捕获存储cookie
print(session.cookies)#打印实时的cookie信息
print("_" * 20 + "分隔符" + "_"*20)
url = "https://xueqiu.com/statuses/hot/listV2.json?since_id=-1&max_id=96837&size=15"# 定位到ajax请求数据包,提取请求url
page_text = session.get(url=url,headers=headers).json()# 携带cookie发起请求
print(page_text)






在这里插入图片描述

原文地址:https://www.cnblogs.com/gemoumou/p/13635342.html