爬虫之requests模块发送带header的请求
我们先写一个获取百度首页的代码
import requests
url = 'https://www.baidu.com'
response = requests.get(url)
print(response.content.decode())
# 打印响应对应请求的请求头信息
print(response.request.headers)
1.1 思考
-
对比浏览器上百度首页的网页源码和代码中的百度首页的源码,有什么不同?
- 查看网页源码的方法:
- 右键-查看网页源代码 或
- 右键-检查
- 查看网页源码的方法:
-
对比对应url的响应内容和代码中的百度首页的源码,有什么不同?
- 查看对应url的响应内容的方法:
- 右键-检查
- 点击
Net work
- 勾选
Preserve log 【保持日志,勾选后,再次刷新会把之前的包保存,不会删除】
- 刷新页面
- 查看
Name
一栏下和浏览器地址栏相同的url的Response
- 查看对应url的响应内容的方法:
-
代码中的百度首页的源码非常少,为什么?
-
需要我们带上请求头信息
回顾爬虫的概念,模拟浏览器,欺骗服务器,获取和浏览器一致的内容
-
请求头中有很多字段,其中User-Agent字段必不可少,表示客户端的操作系统以及浏览器的信息
-
requests.get(url, headers=headers) 【一般情况下headers只放"User-Agent"就行了,】【加上headers更加模仿的像浏览器】
- headers参数接收字典形式的请求头
- 请求头字段名作为key,字段对应的值作为value
从浏览器中复制User-Agent,构造headers字典;完成下面的代码后,运行代码查看结果
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/54.0.2840.99 Safari/537.36"}
# 在请求头中带上User-Agent,模拟浏览器发送请求
response = requests.get(url, headers=headers)
print(response.content)
# 打印请求头信息
print(response.request.headers)
示例代码展示:
import requests
# 目标url
url = 'https://www.baidu.com'
# 向目标url发送get请求
response = requests.get(url)
print(len(response.content.decode()))
print(response.request.headers)
print(response.content.decode())
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
response1 = requests.get(url, headers=headers)
print(len(response1.content.decode()))
print(response1.request.headers)
print(response1.content.decode())
运行效果: