Python学习笔记|爬虫基础(三)session、cookie、代理、retrying模块和timeout参数

Bruce
2024-01-20 / 0 评论 / 22 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年01月20日,已超过306天没有更新,若内容或图片失效,请留言反馈。
AI摘要:本文介绍了Python爬虫中的session、cookie、代理、retrying模块和timeout参数的使用方法。首先,通过实例化一个session对象可以在登录后的页面进行抓包。其次,cookie和session的区别在于数据存放位置和安全性。然后,代理分为正向代理、反向代理、透明代理、匿名代理和高密代理,可以通过proxies参数设置代理ip。最后,retrying模块可以用来自动重试可能失败的程序段,timeout参数可以设置请求的超时时间。

一、实例化一个session对象:requests.session()

  1. 对访问登录后的页面抓包
  2. 确定登录请求的url,请求方法和所需参数
  3. 确定登录才能访问的url和请求方法
  4. 利用requests.session()完成代码

二、cookie池

cookie和session区别:

  1. cookie数据在客户端浏览器,sesseion数据在服务器
  2. cookie本地存放,有安全隐患
  3. session在一定时间保存在服务器,影响服务器内存,可以使用cookie
  4. 登录信息比较重要可以放session保存,其他信息放cookie

三、代理

(一)分类

  • 正向代理:代理客户端
  • 反向代理:代理服务器
  • 透明代理:服务器检测到了使用代理ip,也知道真实ip
  • 匿名代理:服务器检测到了使用了代理ip,但不知道真实ip
  • 高密代理:服务器不知道使用了代理ip,也不知道真实ip

(二) proxies参数

proxies = {
    "http":"", #域名+端口号
    "https":""
}

response = requests.get(url, proxies = proxies)

代理ip无效,会自动使用本地的真实ip

import requests

url = 'https://ip.tool.chinaz.com'

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

proxies = {
    'http':'101.200.235.69:9000'
}

res = requests.get(url, headers = headers, proxies = proxies)
print(res.content.decode())

四、retrying模块和timeout参数

(一) retrying模块

教程:https://zhuanlan.zhihu.com/p/222928201

retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试。

import requests
from retrying import retry

@retry(stop_max_attempt_number = 3)
def test():
    print('123')
    url = 'https://www.baidu.com/'
    response = requests.get(url)
    print(repsonse.content.decode())

try:
    test()
except:
    print('完成了...')
123
123
123
完成了...

(二)timeout参数

强制要求请求在特定时间内返回请求,否则报错。

import requests

url = 'https://www.baidus.com/'

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

res = requests.get(url, headers = headers, timeout = 1)

print(res.content.decode())
1

评论 (0)

取消