在终端中输入以下代码(直接在cmd命令提示符中,不需要打开Python)
pip install requests -i https://pypi.douban.com/simple/
从豆瓣网提供的镜像网站下载requests第三方库
pip install requests
是从国外网站下载,速度慢甚至有时候无法下载
import requests
import requests
response = requests.get('https://movie.douban.com/top250')
print(response.text) # 打印返回的原始HTML
运行代码之后,没反应,无输出结果
可以看一下返回的页面请求状态码是多少:
状态码是418,所有4开头的状态码都表示客户端错误,也就是说我们这边发送的请求存在问题。418状态码表示服务器不想响应你的请求。
但是我们的请求并没有问题。其实,这里是豆瓣在用这个状态码回应爬虫:希望服务正常的浏览器而不是爬虫程序的请求
遇到这种情况,可以绕过去的一个方法就是可以定义请求头,把程序伪装成浏览器
可以新建一个叫做headers的字典变量,请求头的User-Agent里面会给服务器提供一些客户端的信息。所以要去指定User-Agent的值
现在的问题是User-Agent的值是什么?
我们可以从浏览器发送的请求里去“抄作业”
回到浏览器,进入任何一个页面,右键,点击检查
找到“网络”或network。
刷新一下网页,这样你就能看到浏览器发出的所有http请求。随便点击一个请求,找到User-Agent
把冒号后边的信息复制下来到代码中
修改代码为:
import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'
}
response = requests.get('https://movie.douban.com/top250',headers=headers)
print(response.status_code)
运行成功
现在,获取豆瓣top250的电影的页面源码:
import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'
}
response = requests.get('https://movie.douban.com/top250',headers=headers)
print(response.text)