Python网络爬虫(三. Requests模块)

Requests 模块

首先一个简单的requests请求例子(直接复制到PyCharm运行即可):

import requests

url = "https://www.baidu.com"

# 将爬虫程序伪装成浏览器,从而获得更完整的响应数据
headers = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"
}

# 定义响应
response = requests.get(url, headers = headers)

# 打印网页源码的str类型数据
print(response.text)

如果以上例子中requests 标红, 请向下看文章内容

1. requests模块介绍

  1. 作用

    ​ 发送http请求,获取响应数据

  2. 安装(requests模块非自带模块,需进行下载安装)

    在桌面打开win+r 输入cmd
    在黑框中输入(等待下载安装结束):
    pip install requests

  3. 发送get请求

    1. 导入
    2. 调用get方法,对目标url发送请求

2. response 响应对象的text和content之间的区别

response.text 和 response.content 的区别

  1. respons.text ( == response.content.decode)

    1. 类型: str
    2. 解码类型: requests模块自动根据HTTP头部对响应的编码作出有根据的推测,推测文本编码
  2. response.content

    1. 类型: bytes
    2. 解码类型: 没有指定

解决中文乱码问题:

  1. response.content.decode( ) 默认utf-8

  2. response.content.decode(“GBK”)

  3. 常见的编码字符集:

    1. utf-8
    2. gbk
    3. gb2313
    4. ascii
    5. iso-8859-1
手动设定编码格式:
respons.encoding = "utf-8"
print(text)

等价于

print(response.content.decode())  

3. 常用响应对象的其他常用的属性或方法

  1. response.url 响应的url : 有时候响应的url和请求的url不一致
  2. response.status_code : 响应状态码
  3. response.requests.headers : 响应对应的请求头
  4. response.headers : 响应头
  5. response.request._cookies : 响应对应请求的cookie ; 返回cookieJar类型
  6. response.json : 自动将json字符串类型的响应内容转换为python对象(dict / list)

4. 发送 带header的请求

可以得到更详细的响应(让服务器以为是浏览器在操作)

import requests
url = "www.baidu.com"
headers = {   
    #内容为json形式
    'User_Agent' : '',
    'Cookie' : ''
}
response = requests.get(url, headers = headers)
print(response.content.decode())
# 获取响应数据量
print(len(response.content.decode()))
  1. 使用浏览器抓包
  2. 获取基础请求头“user_agent”

5. 发送带参数的请求

1. url中带参数

https://www.baidu.com/s?wd=python

2. 使用params参数

2.发送请求的时候设置参数字典(将params添加至get方法中)

# 添加的参数格式
params = {
	# json 格式
	" " : " ",
	" " : " "
}

实例:

import requests
url = 'https://www.baidu.com/s?'
# 添加请求头
headers = {   #内容为json形式
'User-Agent': ''
}
#构架参数字典
params = {
   'wd' : 'python'
}
# 将参数字典添加至get方法中
response = requests.get(url, headers = headers, params = params)
#返回相应网页地址
print(response.url)

6. 在headers参数中携带Cookie

用来做状态的保持

方法同ua

使用cookie参数保持会话

  1. 构建cookies字典
  2. 在请求的时候将cookie字典赋值给cookies参数

cookies = {

​ ’ ’ : ’ ’

}

两种使用cookie的形式:

import requests

url = "https://home.jd.com/"

headers = {
    "User-Agent": "",
    "cookie": ""
}

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

print(response.text)

import requests

url = "https://home.jd.com/"

headers = {
    "User-Agent": ""
}

cookie = {
    "cookie": ""
}

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

print(response.text)

7. 超时参数(timeout)

import requests

url = 'https://google.com'

# 添加一个timeout参数,当等待2秒还没响应时,自动停止
response = requests.get(url, timeout=2)

8. 使用代理IP (proxies)

分类:

  1. 根据知不知道最终服务器的地址:(正向代理、 反向代理)
  2. 匿名度: (透明代理、 匿名代理、 高匿代理)
  3. 根据使用的协议: (http、 https、 socks隧道代理)

使用:

proxies = {
    # json格式
    "http" : "http://·····"
    
    #或
    
    "https" : "https://·····"
}

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

9. 使用verify参数忽略CA证书

response = requests.get(url, verify=False)
上一篇:把vscode输出中文乱码问题解决了


下一篇:CMU15-445 Project #1 Buffer Pool