当前位置: 首页 > news >正文

爬虫(requests库,logging库)

requests 的使用

Get请求

  • params 参数进行传递各种信息
    import requestsdata = {'name':'germey','age':'25'}r = request.get('url',params=data)print(r.text)
  • json方法

    如果返回的数据类型是json,可以直接用json方法

    r = request.get('url',params=data)print(r.json())# 如果数据返回的不是JSON格式,就会出现解析错误,抛出json.decoder.JSONDecodeErrot异常
  • r.text 和 r.content 的区别

    • r.text 中打印时会转换成 str 类型

    • r.content 的前面带有一个b, 代表这是 bytse 类型的数据

  • 配置请求头

    import requestsheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0','Host':'www.httpbin.org'}r = request.get('url',headers=headers)

POST请求

    import requestsdata = {'name':'germey','age':'25'}r = request.post('url',params=data)print(r.text)

响应

  • 状态码

  • 响应头

  • Cookie

    import requestsr = request.get('url')print(r.status_code)print(r.headers)print(r.cookies)print(r.url)print(r.history)

高级用法

  • 文件上传
    import requestsfile = {'file':open('favicon.ico','rb')}r = requests.post('url',file=file)print(t.text)
  • 设置Cookie
# 获取Cookieimport requsetsr = requests.get('https://www.baidu.com')print(r.cookies)for key,value in r.cookies.items():print(key + '=' + value)# 我们从网站上复制请求头import requestsheaders = {'Cookie':'...','User-Agent':'...'}r = requsets.get('https://github.com/',headers=headers)print(r.text)# 创建一个RequestCookieJar 对象cookies = '..'jar = requsets.cookies.RequestsCookieJar()for cookie in cookies.split(';'):key,value = cookie.split('=',1)jar.set(key,value)r = requests.get('https://github.com/',cookies=jar,headers=headers)
  • Session

    • 它通常在模拟登录成功之后,进行下一步操作时用到

      s = requests.Session()
      s.get(‘url’)

  • 请求中的一些参数

    • SSL错误

      • 将请求中的verify=False,就可以解决了
    • timeout 参数

      • timeout = 1

      • timeout=(5,30)

    • 用户认证

      • auth=(‘…’,‘…’)
    • 代理设置

      • proxies=proxies

      • 其中proxies是一个代理池

正则表达式

常用的方法

  • match

    • 从字符串的起始位置开始匹配正则表达式,如果匹配,就返回匹配成功的结果,如果不匹配,就返回None
  • search

    • 它会搜索整个HTML文本,找到符合上述正则表达式的第一个内容并返回,尽量加上re.S ----> 以免出现匹配不到的问题
  • findall

    • 获取全部匹配的内容
  • sub

    • 借助它来修改文本
  • compile

    • 这个方法将正则字符串编译成正则表达式对象,以便在后面的匹配中复用

logging模块简介

相比print的优点有如下

  • 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必现实大量的调试信息

  • print 将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其他数据,logging则可以有开发者决定将信息输出到什么地方,以及怎么输出

基本使用

    import logginglogging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 这句得到了一个logger实例,__name__这个参数,得到运行的模块名字logger = logging.getLogger(__name__)# 这里的等级依次递增# 默认配置中只会打印 warning 级别以上的日志# 可以通过配置修改打印级别# logging.basicConfig(level=logging.INFO)logger.info("Start print log")logger.debug("Do something")logger.warning("Something maybe fail.")logger.info("Finish")# 当我们需要对日志的输出进行一些格式上的要求,我们就可以这样写,注:配置项要写在最上面,否则可能会出现各种buglogging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 将日志输出到文件中logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',filename='TryLog.log',filemode='a')# 获得自定义的 logger# 注:这里的参数 text_logger 是该logger的名字,# 很多人会用__name__ 来命名# root 这个是全局的logger的名字test_logger = logging.getLogger('text_logger')# 创建一个Handler 实例 -----> 指定了文件名和文件的打开方式file_handler = logging.FileHandler('text_logger.txt',mode='a')# handler 里面可以设置basicConfig 里面大多数的配置,比如下面的输出格式file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))# 这里面可以放入多个handlertest_logger.addHandler(file_handler)# 异常处理try:1/0except:text_logger.exception("Get exception")参数:作用%(levelno)s:打印日志级别的数值%(levelname)s:打印日志级别的名称%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]%(filename)s:打印当前执行程序名%(funcName)s:打印日志的当前函数%(lineno)d:打印日志的当前行号%(asctime)s:打印日志的时间%(thread)d:打印线程ID%(threadName)s:打印线程名称%(process)d:打印进程ID%(message)s:打印日志信息

相关文章:

  • react 父子组件通信 子 直接到父, 父 forwardref子
  • window上 elasticsearch v9.0 与 jmeter5.6.3版本 冲突,造成es 启动失败
  • 关于在Springboot中设置时间格式问题
  • Git -> Git 所有提交阶段的回滚操作
  • 测试-时间规模化定律可以改进世界基础模型吗?
  • [Java · 铢积寸累] 数据结构 — 二维数组 - 概念引入
  • 【YOLOv8-pose部署至RK3588】模型训练→转换RKNN→开发板部署
  • docker保存镜像到本地
  • AutoJs相关学习
  • Spring Boot中`logging.config`配置项的详解及使用说明
  • Vscode指定缓存路径 .vscode 路径
  • 嘻游组件解密工具实战教程:资源解包与UI替换全流程
  • Java从入门到“放弃”(精通)之旅——抽象类和接口⑨
  • Linux新手快速入门指南
  • XML内容解析成实体类
  • 【Python笔记 03 】运算符
  • 基于大疆行业无人机的特色解决方案-无线通信篇:基于蜂窝以及自组网MESH的无线通信C2链路
  • 一文详解Pytorch环境搭建:Mac电脑pip安装Pytorch开发环境
  • 空间数据工程——如何使用 Python 和 ArcPy 对 Vision Zero 多边形的值进行地理处理
  • Linux 安装pm2并全局可用
  • 美联储褐皮书:关税政策背景下,美国部分地区物价上涨、经济前景恶化
  • 韩国检方以受贿嫌疑起诉前总统文在寅
  • 最高法典型案例:学生在校受伤,学校并非必然担责
  • 京东美团商战,能惠及骑手吗?
  • 深一度|王励勤二次创业从未停步,带领中国乒乓直面挑战
  • “仅退款”将成过去时!多个电商平台集体修改售后规则,商家获得更多自主权