【爬虫基础】第三部分 爬虫请求库 1/4

发布于:2025-04-03 ⋅ 阅读:(37) ⋅ 点赞:(0)

 上节内容回顾:【爬虫基础】第二部分 爬虫基础理论 P3/3-CSDN博客

                         【爬虫基础】第二部分 爬虫基础理论 P2/3-CSDN博客

                         【爬虫基础】第二部分 爬虫基础理论 P1/3-CSDN博客

                         【爬虫基础】第一部分 网络通讯 P1/3-CSDN博客

                         【爬虫基础】第一部分 网络通讯-Socket套接字 P2/3-CSDN博客

                         【爬虫基础】第一部分 网络通讯-编程 P3/3-CSDN博客

 爬虫相关文档,希望互相学习,共同进步

风123456789~-CSDN博客


前言

1.知识点碎片化:每个网站实现的技术相似但是有区别,要求我们根据不同的网站使用不同的应对手段。主要是常用的一些网站爬取技术。

2.学习难度:入门比web简单,但后期难度要比web难,在于爬虫工程师与网站开发及运维人员的对抗。比如你写了爬虫但是被网站运维人员发现后添加反爬,那么就要解决反爬。即平台更新换代,爬虫策略需要实时更新。

3.学习特点:以摸个网站爬虫为讲解对象,即一个技术点的案例。

4.后续发展:要求掌握的东西多,工作中根据工作需要涉及到更多没有接触的知识。

5.法律层面:爬虫相关工作属于灰色地带,目前国内现行法律对于爬虫相关评判还没有明确制度。

6.建议:好记性不如烂笔头,建议多找网站进行爬取联系,同时做好笔记。

1.爬虫请求库概述 

第三部分 爬虫请求库

      1、requests 请求库基本使用(本文)

      2、处理cookie 相关的请求

      3、IP代理和发送 post 请求

      4、requests-html 模块的使用

2.requests 请求库基本使用

本节章节-知识点:
    1.requests模块介绍
    2.安装
    3.发送get请求
    4.response响应对象说明
    5.发送带headers的请求
    6.发送带参数的请求

2.1 requests模块介绍 

目标:

     1)掌握requests 对应的response 属性方法

     2)掌握发送headers 的请求以及过滤headers 中的键值对

     3)掌握发送带参数的请求的两种方式  

requests模块作用: 发送http请求,获取响应数据

requests模块,又称为爬虫请求库  ,该库不是python解释器自带的,需要额外安装。

2.2 安装

安装命令:

pip install requests

(1)配置pip全局安装源 :(配置后,下载第三方模块的速度会非常快)

步骤:

1.windows键+r键开打运行窗口,输入%appdata%
    执行效果:自动打开一个文件夹


2.在当前文件夹中,新建一个文件夹,命名为pip
3.进入pip文件夹,新建一个文本文档  pip.ini
4.打开pip.ini 文本文档,输入以下内容,保存

[global]
timeout = 1000
index-url = https://mirrors.aliyun.com/pypi/simple
trusted-host = mirrors.aliyun.com

到此,pip 全局配置完成。

(2)requests模块安装

步骤:在pycharm的左下角,点击terminal 按钮,打开终端
          输入pip install requests 回车

    注意:我这个已装了,已满足要求(使用--upgrade进行升级):d:\feng_study-programs \anaconda\lib\site包中的请求清理 

2.3 发送get请求

       接下来可以使用 request模块 对一个地址发送请求,传入url.-->通过response的方法查看获取的内容。

       查看response 的源码内容方法:response.content.decode()  或 response.text

 

    response.content.decode() 这个方法可以自定义解码格式,response.text默认解码格式。

  代码如下:

import requests

url='https://www.baidu.com'
response = requests.get(url)
print(response.content.decode('utf-8'))
#
#print(response.text)

不知道为什么报错 ???

 修改后去掉 www ,再次执行ok:

2.4 response 响应对象说明

(1)response 获取源码方法

"""response响应对象常用方法"""
# 获取源码方法
# 类型区别
# response.content.decode(): str类型
# result = response.content.decode()
# print(result, type(result))
# print(response.content, type(response.content))
#
# response.content: bytes类型,二进制数据
#
# response.text: str类型
# result1 = response.text
# print(result1, type(result1))

代码:

import requests

url='https://baidu.com'
response = requests.get(url)
#print(response.content.decode('utf-8'))
#print(response.text)

result = response.content
print(response.content, type(response.content))

结果截图:  

说明:response.content 字节类型,再对它decode() 解码得到字符串。

(2) response 响应对象的其他常用属性或方法

# 获取响应的url地址
print(response.url)
 # 获取响应状态码
print(response.status_code)


# 获取响应对应的请求头
print(response.request.headers)
# 获取响应头
print(response.headers)
# 获取响应的cookie
print(response.cookies)
# 获取响应的json数据
 print(response.json())

注意:response.json() 获取响应的json数据

使用此方法的前置条件:
       响应内容必须是json数据,才可以使用此方法
       什么是json数据?json数据就是字典数据
       在前端:有一种数据结构和我们的python字典是一模一样的,前端称这数据叫json数据
       在python:这种结构的数据类型叫字典类型

2.5 发送带headers 的请求

作用:模拟浏览器,欺骗服务器,获取和浏览器一致的内容
添加请求头:加强了爬虫程序的稳定性

import requests
# headers的形式:字典的形式
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
}
url = 'https://www.baidu.com'
response = requests.get(url, headers=headers)
print(response.content.decode())

2.6 发送带参数的请求

# get请求
#### 第一种,将请求参数拼接在地址的后面
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python&fenlei=256&rsv_pq=0xdb74d60f00026a37&rsv_t=1f5ahhNXLp4IjxQQpUhz%2Fe1P9AgSXXkGS9oz7QY5ItpabCCfY03pHJ8IIVXm&rqlang=en&rsv_dl=tb&rsv_enter=1&rsv_sug3=7&rsv_sug1=6&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&inputT=1225&rsv_sug4=2056&rsv_sug=3
小技巧:get请求的查询参数,部分是可以直接删除掉的
一个参数一个参数进行尝试删除,熟悉之后,几个参数一起删除

import requests
url = 'https://www.baidu.com/s?ie=utf-8&wd=python'
headers = {
    # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    # 'Accept-Encoding': 'gzip, deflate, br',
    # 'Accept-Language': 'zh-CN,zh;q=0.9',
    # 'Cache-Control': 'max-age=0',
    # 'Connection': 'keep-alive',
    # 'Cookie': 'BIDUPSID=D18E0CF343C1DC46DC0CA99A16BE18C3; PSTM=1682317572; BD_UPN=12314753; newlogin=1; BAIDUID=35D056484E32488A12B4E189D11FA2CE:FG=1; BAIDUID_BFESS=35D056484E32488A12B4E189D11FA2CE:FG=1; ZFY=9ZFyWo7Lo:BUAL:ASW4KskwxGRSb0pDGxJPrZe1i0sXKc:C; B64_BOT=1; ariaDefaultTheme=undefined; RT="z=1&dm=baidu.com&si=099661dc-c724-4b0c-9509-1fe74c89ab54&ss=lh0aynxo&sl=1&tt=1rl&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=2js&nu=4u4ak2th&cl=74vq&ul=9fq9&hd=9fqp"; BA_HECTOR=8ha0a1a4a5258h8k002k212t1i4pokq1m; ab_sr=1.0.1_Y2U3YzkxYjRmN2Q2MTFkMjhiZTVlZTU3NDFhYjQ0NTBjNDhlNWFmM2VhNGUzNDg1NzZkZGIwNTFmNWM5ODY5NDQ3YjMxMjc4NWNmM2Y3ODhiNmUxMGQ0MTE0NDM2NDgwODM2OTIyYmI5NzJmYTJhYTNiMDJiY2YwN2I0ODc4ODFmZDg4Yjg5N2E0ZDRjNmM1MDVjN2QyOWZiMDBlODc4NQ==; BD_HOME=1; BDRCVFR[E-fQi7m9KnT]=hXbPg8wncLRTZKJpMD8mvqV; delPer=0; BD_CK_SAM=1; PSINO=6; H_PS_PSSID=38516_36545_38529_38469_38538_38468_38486_37923_37709_26350_38544; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_645EC=f5132gVwRZz2YijWP2btH6xz%2FcJj9p8BqId%2FsK%2FUQjVrWIxgq2eTNEc2Cok; baikeVisitId=5f226d1c-31cf-4df8-9917-9ba8b6d62eff; COOKIE_SESSION=132_0_7_9_4_10_1_0_7_4_0_3_2781_0_0_0_1682604006_0_1682771745%7C9%2382625_24_1682590530%7C6',
    # 'Host': 'www.baidu.com',
    # 'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; M031 Build/IML74K) UC AppleWebKit/534.31 (KHTML, like Gecko) Mobile Safari/534.31'
}
response = requests.get(url, headers=headers).content.decode()
print(response)
#### 使用参数进行指定传参
import requests

url = 'https://www.baidu.com/s?'
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; M031 Build/IML74K) UC AppleWebKit/534.31 (KHTML, like Gecko) Mobile Safari/534.31'
}
params = {
    'ie': 'utf-8',
    'wd': '奥迪'
}
response = requests.get(url, headers=headers, params=params).content.decode()
print(response)

注意:法律和道德问题

在使用爬虫时,需要遵守一定的法律和道德准则,尊重网站的隐私政策和使用条款,确保合法和负责任地使用爬虫技术。

今天先到这里吧~~  


项目管理--相关知识   

项目管理-项目绩效域1/2-CSDN博客

项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客

项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客

高项-案例分析万能答案(作业分享)-CSDN博客

项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客

项目管理-配置管理与变更-CSDN博客

项目管理-项目管理科学基础-CSDN博客

项目管理-高级项目管理-CSDN博客

项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客


Oracle其他文档,希望互相学习,共同进步

Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客

oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客

ORA-12899报错,遇到数据表某字段长度奇怪现象:“Oracle字符型,长度50”但length查却没有50_varchar(50) oracle 超出截断-CSDN博客

EXP-00091: Exporting questionable statistics.解决方案-CSDN博客

Oracle 更换监听端口-CSDN博客


网站公告

今日签到

点亮在社区的每一天
去签到