爬虫 之 requests

安装pip install requests

官方设计原则:让HTTP服务于人类

一、常用方法 import requests url = "http://www.httpbin.org/get" headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"} res = requests.get(url, headers=headers) print(res.encoding) # 获取字符编码 print(res.text) # 获取HTML字符串 print(res.content) # 以二进制形式打开 print(res.status_code) # 获取响应状态码 print(res.url) # 获取响应URL

汇总:

encoding # 响应字符编码 text # 字符串 content # 字节流 status_code # HTTP响应码 url # 实际数据的URL地址

示例:

保存图片到本地

url为https://inews.gtimg.com/newsapp_bt/0/10186045426/1000

import requests url = "https://inews.gtimg.com/newsapp_bt/0/10186045426/1000" headers = {"User-Agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E"} res = requests.get(url=url, headers=headers).content with open("demo.jpg", "wb") as f: f.write(res)

字符编码也是使用urllib.parse.urlencode()

1. GET

requests.get()

1.1 params

查询参数

1.1.1 参数类型

字典类型,字典中键值对作为查询参数

params = { "kw":"泰勒·斯威夫特吧" "pn":50 }

无需编码,requests模块会将其封装好请求

1.1.2 使用方法

res = requests.get(url, params, headers=headers)

1.1.3 特点

URL为基准的URL地址,不包含查询参数

该方法会自动对params字典编码,然后和url拼接

1.1.4 示例 import requests #基准的URL地址 base_url = "http://www.baidu.com/s?" # 查询参数 params = { "kw":"泰勒·斯威夫特吧", "pn":50 } # 请求头 headers = { "User-Agent":"Mozilla/5.0" } res = requests.get(url=base_url, params=params, headers=headers) print(res.content.decode("utf-8", "ignore")) 1.2 auth

Web客户端认证

1.2.1 特点

针对于需要web客户端用户名密码认证的网站

auth = ('username','password')

1.2.3 使用 import requests from config import * base_url = "http://code.tarena.com.cn/AIDCode/aid1903/12-spider/spider_day{}_note.zip" auth = (USERNAME, PASSWD) headers = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3895.5 Safari/537.36"} def down(): for day in range(1,11): day = str(day).zfill(2) url = base_url.format(day) try: res = requests.get(url=url, auth=auth, headers=headers).content filename = url.split("http://www.likecs.com/")[-1] with open(filename, "wb") as f: f.write(res) print(filename, "OK") except Exception: print("资源不存在") down() # 配置文件 USERNAME = "" PASSWD = "" 1.3 verify

证书认证参数

1.3.1 使用场景

适用网站: https类型网站但是没有经过 证书认证机构 认证的网站

适用场景: 抛出 SSLError 异常则考虑使用此参数

1.3.2 参数类型

verify=True(默认) : 检查证书认证

verify=False(常用): 忽略证书认证

1.3.3 示例 response = requests.get( url=url, params=params, headers=headers, verify=False ) 1.4 proxies

代理参数

爬虫反爬之代理IP

2. POST

携带form-data请求server

控制台介绍

打开浏览器,F12打开控制台,找到Network选项卡

控制台常用选项

Network: 抓取网络数据包

ALL: 抓取所有的网络数据包

XHR:抓取异步加载的网络数据包

JS : 抓取所有的JS文件

Sources: 格式化输出并打断点调试JavaScript代码,助于分析爬虫中一些参数

Console: 交互模式,可对JavaScript中的代码进行测试

抓取具体网络数据包后

单击左侧网络数据包地址,进入数据包详情,查看右侧

右侧:

Headers: 整个请求信息

General、Response Headers、Request Headers、Query String、Form Data

Preview: 对响应内容进行预览

Response:响应内容

控制台介绍

2.1data data = {key:value} # 构造form-data response = requests.post(url,data=data,headers=headers) # data :post数据(Form表单数据-字典格式) 2.1.1 特点

GET请求 : 参数在URL地址中有显示
POST请求: Form表单提交数据

2.1.2 案例

有道翻译破解案例(post)

有道翻译

二、高级用法 1. 会话保持

步骤:

寻找POST地址(一般在form表单的action属性)

发送用户名和密码,用session保持登录

步骤:

实例化session对象session = requests.session()

POST表单中的action地址,注意携带data

GET主页地址

# 实例化session对象 session = requests.session() # 先POST form中的action地址 session.post(url=post_url, data=data, headers=headers) # 再GET html = session.get(url=get_url, headers=headers).text

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxdxs.html