前面了解了爬虫和网络请求,下面就可以开始正式的了解Python中爬虫相关的模块了。
很多爬虫相关的书籍一般刚开始都会讲一下urllib模块,等你跟着书中的学完之后,会告诉你urllib模块用起来比较复杂,通常不使用
确实,urllib是一个比较古老的模块,封装的爬虫方法也相对复杂。所以可以直接开始撸requests
模块.
Requests模块的作用就是模拟浏览器发送请求。是Python中原生的一款基于网络请求的模块,不仅功能强大,而且使用起来也比较简单!
模块的安装
直接通过pip进行安装即可
pip install requests
使用起来也非常的简单,分为三步
-
指定URL,也就是说你要爬取的网站地址 -
发送请求,请求又分为GET/POST/PUT/DELETE等等 -
获取响应数据
这样看是不是非常简单呢?废话不多说,来个简单的例子,比如我需要爬取百度的首页
GET请求
requests
url = 'https://www.baidu.com'
# 发送get请求
response = requests.get(url)
# 获取网页源代码
baidu_html = response.text
# 将获取的数据进行持久化(保存)
with open('baidu.html', 'w', encoding='utf-8') as f:
f.write(baidu_html)
执行之后就会在同级目录下有个baidu.html
的文件。
以上就是一个最最最基本的使用requests发送get请求的例子。同样如果发送其他请求比如POST/PUT/HEAD等等
requests.post(url)
requests.delete(url)
requests.put(url)
...
在发送请求的时候,大部分时候会携带一些参数的。比如我们进行搜索的时候,发送的GET请求就会携带搜索内容
比如我在百度上搜索python
时,url是 https://www.baidu.com/s?wd=python
为了使爬虫程序更加灵活,肯定要将搜索的内容进行分离。可以通过构建一个字典参数,发送GET请求
requests
# 输入搜索的关键词
wd = input('请输入要搜索的内容:n')
url = 'https://www.baidu.com/s?'
# 构建get请求的搜索参数
url_param = {'wd': wd}
# 防止爬虫被拦截,增加请求的UA
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
# 发送GET请求
response = requests.get(url, params=url_param, headers=header)
# 获取网页源代码
wd_html = response.text
# 写入文件,持久化操作
with open('wd.html', 'w', encoding='utf-8') as f:
f.write(wd_html)
具体的GET用法如下
POST请求
使用httpbin网站进行测试
httpbin是一个能测试HTTP请求和响应的网站,支持各种请求方法
1、以form表单的形式提交参数,只需要将请求参数构造成一个字典,传给data参数即可。
requests
url = 'http://httpbin.org/post'
params = {'name': '公众号:Python极客专栏', 'language': 'python'}
response = requests.post(url, data=params)
print(response.json())
执行结果:
}
2、以字符串的形式提交参数,通过json.dumps
将字典转换成字符串
json
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
url = 'http://httpbin.org/post'
params = {'name': 'Tom', 'hobby': ['music', 'game']}
# 通过json.dumps 将字典格式化为json字符串
response = requests.post(url, json=json.dumps(params), headers=header)
print(response.json())
执行结果:
}
3、使用post请求提交文件(以multipart形式)
json
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
url = 'http://httpbin.org/post'
# 读取 baidu.html 文件, 'rb':以二进制形式读取
files = {'file': open('baidu.html', 'rb')}
# post形式传入file文件
response = requests.post(url, files=files)
print(response.json())
执行结果:
}
响应的处理
通过GET/POST等请求会获取到服务器的响应,也就是上面例子中的response
。改如何获取更多的信息呢?
requests
headers = {
'referer': 'https://www.baidu.com',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
url = 'http://httpbin.org/post'
# 读取 baidu.html 文件, 'rb':以二进制形式读取
files = {'file': open('baidu.html', 'rb')}
# post形式传入file文件
response = requests.post(url, files=files, headers=headers, cookies={'test': 'abcdefg'})
# response的处理
# 指定编码
response.encoding = 'utf-8'
print(response.url) # 请求的url
print(response.encoding) # 请求的编码、
print(response.status_code) # 状态码
print(response.content) # 响应内容的二进制形式 (保存文件、图片、音频等)
print(response.text) # 响应内容的文本形式
print(response.json()) # 响应内容的json形式
print(response.headers) # 响应头信息
print(response.request.headers) # 请求头信息
print(response.request.headers['referer']) # 请求头对应属性的内容
print(response.cookies) # cookie信息,返回的cookie对象
print(response.cookies.items())
输出结果如下图
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何检查python中安装了哪些模块10/14
- ♥ python如何输出所有属性12/03
- ♥ 如何设置中文版Python?09/16
- ♥ 输出棋盘以进入python编程10/11
- ♥ python中的temp是什么意思?08/19
- ♥ 如何在python中重复打印多次?08/21
内容反馈