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)