Python应用之爬虫基础:requests爬虫库的简单使用(1)

2023-05-16

引言

在生活中,大家都使用过浏览器,通过输入要搜索的内容以及鼠标点击等操作方式,来获取互联网上的信息。直观的理解这个过程就是,客户端(用户)发送请求给服务器,服务器通过解析请求,将用户需要的信息作为响应内容传回去。

什么是爬虫

那这跟爬虫有啥关系?爬虫这种类型的程序,能够模拟人的操作来自动获取相关的信息,由于人获取信息会受到操作速度上的限制,使用爬虫可以在短时间内获取到大量信息
一个爬虫程序的产生,可以分为一下几个步骤

  1. 获取要访问的内容的链接url
  2. 设置爬虫的请求头部等字段信息(可选步骤)
  3. 发送某种类型的请求
  4. 获取得到响应,对响应内容进行分析提取需要的内容

其中1、2步骤的顺序不是绝对的,url、字段信息等内容,绝大部分情况下都需要动态生成,这部分将在后续的文章中进行讲解。
接下来将通过一个简单的案例来创建爬虫程序。

准备工作

requests库的安装

pip install requests

代码部分

简单爬虫

import requests

def GetResponse1():
    url = "https://www.baidu.com"
	# 这个get代表使用get方法请求该url
	# 返回值是 服务器给get请求的响应封装成的Response对象
    response = requests.get(url=url)
	# response.content是二进制的响应数据
    print(response.request.headers)
    print(response.content.decode())
    print(len(response.text))



if __name__ == "__main__":
    GetResponse1()

这是一个最简单的爬虫程序,未设置任何字段,运行结果如下:
在这里插入图片描述
但响应的长度只有2443,似乎有点短,这里的问题出在请求头的User-Agent的未设置,默认是python-requests/2.28.2,导致百度发现这是一个爬虫而不是浏览器,因此返回给我们的并非是一个正确的界面,通过设置这个字段来解决这个问题。
代码如下:

import requests

def GetResponse1():
    url = "https://www.baidu.com"

    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36 QIHU 360SE'
    }

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

    # print(response.request.headers)
    # print(response.content.decode())
    print(len(response.text))



if __name__ == "__main__":
    GetResponse1()

这样就能获取正确的页面了
注意:User-Agent的百度找一下,也可以查看自己浏览器的User-Agent

查看自己浏览器的User-Agent

步骤如下:
打开自己的浏览器---------->>按F12打开开发者工具---------->>点击网络功能,选中全部按钮---------->>按F5刷新一下进行抓包---------->>抓到的东西,随便选一个,就能看到User-Agent了

结果图如下
在这里插入图片描述
浏览器自带的开发者工具功能很强大,大部分爬虫的开发都会使用它来抓包分析。

Response对象解析

# Response对象的常用属性与方法
def attrs():
    url = "https://www.baidu.com"
    response = requests.get(url=url)
    # 响应的真实地址 也就是最终跳转的并返回给你的url
    print(response.url)
    # 状态码
    print(response.status_code)
    # 请求头
    print(response.request.headers)
    # 响应头
    print(response.headers)
    # 响应中携带的cookies
    print(response.cookies)
    # content是二进制的响应数据 这里decode能解决中文乱码问题
    print(response.content.decode(encoding='utf8'))

在获取响应的数据时,推荐使用response.content.decode()而不是response.text,可以同设置编码字符集来解决中文乱码的问题

模拟浏览器来查询

在百度界面,输入python进行搜索,能得到以下界面:
在这里插入图片描述
在地址栏里,可以得到一个链接:

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python&fenlei=256&rsv_pq=0xd9be4c3000077eb1&rsv_t=0bb0WRpffKNGHcOpAMRtHYKVb4%2Ftb4jsrpl8LBciDmX7wYA0osUpZvWRaNwa&rqlang=en&rsv_enter=1&rsv_dl=tb&rsv_sug3=7&rsv_sug1=6&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=python&rsp=5&inputT=1544&rsv_sug4=2289

这是带了参数的链接,里面必定有关键参数(也就是不可缺少的,如查询字符串),也有一些参数是可有可无的,因此要使用爬虫模拟请求,也就需要找到关键参数,如何找:通过反复删除参数同时访问该链接,直到页面不能正常显示为止,那么上一次删除的参数里面就有关键参数。
通过测试,关键参数的key为wd,等号=后面的就是查询的值。
下面利用爬虫模拟浏览器搜索

# 带参数的请求
def sendPara1():
    # 加上user-agent就能初步蒙混过关
    # https://www.baidu.com/s?wd=python
    # 通过parameter属性 来设置关键参数
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36 QIHU 360SE'
    }
    url = "https://www.baidu.com/s?"
    kw = {'wd': 'python'}
    # 通过params设置参数
    response = requests.get(url=url, headers=headers, params=kw)
    # 关键参数 可以通过查询的时候 删除参数来确定

    with open('python.html', 'wb') as f:
        f.write(response.content)

打开得到了 python.html,可以得到如下的界面就代表成功
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python应用之爬虫基础:requests爬虫库的简单使用(1) 的相关文章

  • C++学习困难,自学需要做到这几个方面……

    喜欢的可以转发收藏加关注哦 xff01 C 43 43 是一种静态数据类型检查的 xff0c 支持多重编程范式的通用程序设计语言 它支持过程化程序设计 数据抽象 面向对象程序设计 制作图标等等泛型程序设计等多种程序设计风格 自学编程语言难在
  • vue js时分秒计时器_Vue js框架的倒数计时器

    vue js时分秒计时器 VUE倒计时 vue count down timer This is a count down timer for Vue js framework This library supports two types
  • TCP长连接(Keepalive)

    TCP Keepalive的起源 TCP协议中有长连接和短连接之分 短连接环境下 xff0c 数据交互完毕后 xff0c 主动释放连接 xff1b 长连接的环境下 xff0c 进行一次数据交互后 xff0c 很长一段时间内无数据交互时 xf
  • 从输入一个网址到浏览器显示页面经历的全过程

    作为网络专栏的开篇导文 xff0c 本文概况介绍下经典案例 xff1a 从输入一个网址到浏览器显示页面的全过程 步骤概要介绍如下 xff1a 1 输入网址2 DNS解析获取域名对应的IP地址3 建立TCP连接4 web浏览器向web服务器发
  • 端口号是什么以及常见端口号

    端口号 具有网络功能的应用软件的标识号 注意 xff0c 端口号是不固定的 xff0c 即可以由用户手工可以分配 xff08 当然 xff0c 一般在软件编写时就已经定义 xff09 当然 xff0c 有很多应用软件有公认的默认的端口 xf
  • DNS域名解析过程

    目录 1 DNS2 域名系统DNS 的作用3 域名的层级关系4 DNS域名解析过程 递归查询迭代查询 5 高速缓存6 DNS相关面试问题 1 DNS DNS xff08 Domain Name System xff09 是域名系统的英文缩写
  • java常见面试题

    目录 基础语法 1 Java 语言的优点 xff1f 2 Java 如何实现平台无关 xff1f 3 JVM xff0c JDK 和 JRE 的区别 xff1f 4 Java 按值调用还是引用调用 xff1f 5 浅拷贝和深拷贝的区别 xf
  • 分段分页存储

    2020 4 27 在家的网课 xff0c 无聊 xff0c 记录一下分页 xff0c 分段 xff0c 段页式存储笔记 昨天刚学了分页存储 xff0c 听得我一脸懵逼 xff0c 好在课下花了很长时间才弄懂 1 分页存储管理 1 分页存储
  • 解压码

    BN00001 22kke BN00002 88cde BN00003 00ike BN00004 76cdb BN00005 09dbm BN00006 0mndc BN00007 cd78d BN00008 bdmf8 BN00009
  • 保险项目业务流程

    1 整个项目分为四分模块 xff1a 信息采集模块 信息验证 审批 生成合同 xff08 开单 xff09 信息采集模块 xff1a 包括购买保险产品 xff0c 客户个人信息 1 纸质文档给客户填写 xff0c 在回来录入系统 2 客户直
  • IDEA使用maven自定义archetype

    标题自定义archetype 在pom文件中添加archetype plugin span class token generics span class token punctuation lt span plugin span clas
  • 自定义Perperties文件内容读取

    新建properties文件放在resources目录下 properties文件内容 url span class token operator 61 span jdbc span class token operator span my
  • 如何使用Google TV设置Chromecast

    Justin Duino 贾斯汀 杜伊诺 Justin Duino Google changed up its streaming platform with the release of the Chromecast with Googl
  • 使用CSS中的Hover控制显示子元素或者兄弟元素

    lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta name 61 34 viewport
  • maven项目中的jdbc连接步骤

    在maven项目pom xml中到入驱动包 xff08 以下是驱动包代码 xff09 lt dependencies gt lt https mvnrepository com artifact mysql mysql connector
  • executeUpdate()与executeQuery()的使用

    增 删 改 用executeUpdate xff08 xff09 返回值为int型 xff0c 表示被影响的行数 例子 查用executeQuery 返回的是一个集合 next xff08 xff09 表示 指针先下一行 xff0c 还有f
  • Access denied for user ''@'localhost' (using password: YES)错误解决方法

    远程登录被拒绝 xff0c 要改一个表数据的属性让他可以远程登录 解决方法如下 xff0c 执行命令 xff1a mysql gt use mysql mysql gt select host user from user 查看结果是不是r
  • 基于yolov5和Tesseract-OCR车牌识别项目 Linux系统上搭建运行(大概结构)

    项目大概分为两部分 xff0c 首先使用yolov5进行目标检测并截图 xff1b 然后对图片一系列的处理后使用Tesseract OCR进行字符识别 xff08 本文为简易版框架结构 xff0c 如果看完感兴趣可以在文末跳转看细节操作 x
  • ubuntu20.04使用微软Azure Kinect DK 实现三维重建demo记录

    本文仅为在ubuntu20 04实现Azure Kinect DK 三维重建demo xff0c 此文记录实现过程仅供学习 xff0c 同时为大家避坑 xff0c 文中参考大量文章已列至末尾 1 ros安装 2 安装微软 DK的sdk 3
  • 常见一面问题

    1 智能指针 常用的c 43 43 库 Standard Template Library STL Algorithms 算法 Containers 容器 Functions 函数 Iterators 迭代器 Boost 同样是大量C 43

随机推荐

  • ROS datatype/md5sum错误

    I got this error today Problem ERROR 1576785283 032878520 Client rostopic 21515 1576784759002 wants topic timestamp to h
  • 快速安装Pytorch和Torchvision

    文章目录 1 Linux下激活自己的虚拟环境并查看Python版本2 查看需要安装的Pytorch和Torchvision版本3 直接命令行安装3 1 如果不报错的话3 2 ERROR Could not install packages
  • 【Darknet-53】YOLOv3 backbone Darknet-53 详解

    文章目录 1 模型计算量与参数量2 Darknet 53网络3 感谢链接 1 模型计算量与参数量 模型计算量与参数量的计算方式主要有两种 xff0c 一种是使用thop库 xff0c 一种是使用torchsummaryX 使用pip ins
  • ubuntu 默认命令行_从命令行在Ubuntu上设置默认浏览器

    ubuntu 默认命令行 Ubuntu Linux has a default browser functionality that will automatically launch the correct browser when cl
  • 【DeeplabV3+】DeeplabV3+网络结构详解

    文章目录 1 常规卷积与空洞卷积的对比1 1 空洞卷积简介1 2 空洞卷积的优点 2 DeeplabV3 43 模型简介3 DeeplabV3 43 网络代码4 mobilenetv2网络代码5 感谢链接 聊DeeplabV3 43 网络前
  • 【YOLOv3 decode】YOLOv3中解码理解decode_box

    文章目录 1 解码是什么意思2 代码解读3 生成网格中心 代码详解4 按照网格格式生成先验框的宽高 代码详解5 感谢链接 1 解码是什么意思 在利用YOLOv3网络结构提取到out0 out1 out2之后 xff0c 不同尺度下每个网格点
  • 【DeeplabV3+ MIoU】DeeplabV3+计算评价指标

    文章目录 1 分割常用评价指标1 1 什么是MIoU1 2 什么是PA1 2 什么是MPA 2 根据混淆矩阵计算评价指标2 1 计算MIoU2 2 计算PA2 3 计算MPA 3 计算 MIoU 总体代码4 compute mIoU 函数
  • 【MobileNetV3】MobileNetV3网络结构详解

    文章目录 1 MobileNetV3创新点2 block变成了什么样2 1 总体介绍2 2 SE模块理解2 3 ReLu6和hardswish激活函数理解 3 网络总体结构4 代码解读5 感谢链接 在看本文前 xff0c 强烈建议先看一下之
  • 【Smooth L1 Loss】Smooth L1损失函数理解

    文章目录 1 引言2 L1 Loss3 L2 Loss4 Smooth L1 Loss5 曲线对比分析6 参考链接 1 引言 目标检测任务的损失函数由Classificition Loss和Bounding Box Regeression
  • Command errored out with exit status 1类似问题解决方案

    在使用pip install onnx时遇到如下错误 xff1a Building wheels for collected packages onnx Building wheel for onnx setup py error ERRO
  • 【tensorflow onnx】TensorFlow2导出ONNX及模型可视化教程

    文章目录 1 背景介绍2 实验环境3 tf2onnx工具介绍4 代码实操4 1 TensorFlow2与ONNX模型导出4 2 ONNX正确性验证4 3 TensorFlow2与ONNX的一致性检查4 4 多输入的情况4 5 设定输入 输出
  • 【PaddlePaddle onnx】PaddlePaddle导出ONNX及模型可视化教程

    文章目录 1 背景介绍2 实验环境3 paddle onnx export函数简介4 代码实操4 1 PaddlePaddle与ONNX模型导出4 2 ONNX正确性验证4 3 PaddlePaddle与ONNX的一致性检查4 4 多输入的
  • 【linux命令】如何查看文件/文件夹所占空间大小

    文章目录 1 查看文件大小1 1 方法1 xff1a ls lh1 2 方法2 xff1a du sh1 3 方法3 xff1a stat 2 查看文件夹所占大小2 1 方法1 xff1a du2 2 方法2 xff1a ncdu 1 查看
  • 更改ubuntu中默认python版本

    在ubuntu中更改python版本 因为刚开始学习python 不论是网上教程还是书上都推荐python3 因为学习需要我用的电脑上只有ubuntu系统 在终端输入python它默认是如下 xff1a python exit 退出pyth
  • vlc 提取音轨_如何使VLC自动选择英语音轨

    vlc 提取音轨 If you ve used VLC player to play anything that has multiple audio tracks you ve probably noticed that it doesn
  • Android 串口通信 原来如此简单

    EasySerial串口通信SDK 一 前言二 SDK的使用介绍引入库EasyKeepReceivePort的使用EasyWaitRspPort的使用其他API的使用介绍 三 github传送门四 鸣谢五 转载请注明出处 一 前言 如果你的
  • 超声波模块HC-SRO4

    1 xff09 引脚和原理 xff1a 该模块有VCC GND Trig和Echo针脚 TRIG是输出和ECHO是输入 该模块的工作原理为 xff0c 先向TRIG脚输入至少10us的触发信号 该模块内部将发出 8 个 40kHz 周期电平
  • HTTP Auth

    文章目录 关于 HTTP Auth1 session2 authorization 的 http header2 1 Basic 形式2 2 Bearer 类型 xff08 token xff09 参考资源 free coder xff1a
  • Ubuntu 18.04安装ROS

    1 换源 span class token function sudo span sh c span class token string 39 etc lsb release amp amp echo 34 deb http mirror
  • Python应用之爬虫基础:requests爬虫库的简单使用(1)

    引言 在生活中 xff0c 大家都使用过浏览器 xff0c 通过输入要搜索的内容以及鼠标点击等操作方式 xff0c 来获取互联网上的信息 直观的理解这个过程就是 xff0c 客户端 用户 发送请求给服务器 xff0c 服务器通过解析请求 x