python原生基于网络请求的模块,比urllib更实用
相比urllib优势
- 自动处理编码
- 自动处理post请求参数、并转码
- 简化cookie和代理操作
安装使用
pip install requests
代理IP
注意!! 代理如果代理ip为http协议 那么post协议也统一http
get与post参数
请求类型 | 参数1 | 参数2 | *参数 | 代理ip |
---|---|---|---|---|
GET | url | params拼接内容 | headers请求头 | |
POST | url | data内容 | headers请求头 | proxies |
响应体response常用属性
语法 | 作用 |
---|---|
response.content | 取二进制byte类型的页面 |
response.status_code | 获取响应状态码 |
response.headers | 取响应 |
response.url | 取url |
GET案例
抓取豆瓣电影信息
import requests
url = 'https://movie.douban.com/j/chart/top_list?'
# get参数拼装
params = {
'type': '11',
'interval_id': '100:90',
'action': '',
'start': '20',
'limit': '20',
}
# 自定义请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
response = requests.get(url=url, params=params, headers=headers)
data = response.text
with open('./测试.html', 'w', encoding='utf-8') as f:
f.write(data)
POST案例
取肯德基全国店地址
代理ip
import requests
url = 'http://www.kfc.com.cn/kfccda/storelist/index.aspx'
data = {
'cname':'',
'pid':'',
'keyword': '重庆',
'pageIndex': '1',
'pageSize': '10',
}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
# 代理ip
proxies = {
'http': '129.28.66.50:80',
}
response = requests.post(url=url, data=data, proxies=proxies, headers=headers)
print(response.text)
综合案例
爬搜狗搜查询页面指定页数内容
import requests
import os
# 创建储存文件夹
if not os.path.exists('./pages'):
os.mkdir('./pages')
word = input('输入要搜索的词条')
start_page = int(input('起始页码'))
end_page = int(input('结束页码'))
url = 'https://zhihu.sogou.com/zhihu'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
for i in range(start_page, end_page+1):
params = {
'query': word,
'ie': 'utf8',
'sut': '630',
'lkt': '0,0,0',
'sst0': '1542108506930',
'page': i,
}
start_page += start_page
response = requests.get(url=url, params=params, headers=headers)
fileName = word+str(i)+'.html'
filePath = 'pages/' + fileName
with open(filePath, 'w', encoding='utf-8') as f:
f.write(response.text)
print('文件%s写入成功' % fileName)
带cookie的访问
session对象:发送请求(会将cookie对象自动存储)
如果请求服务器返回cookie那么session请求会自动储存cookie,并且再次用session访问时会携带cookie
import requests
login_url = 'https://accounts.douban.com/login'
ata = {
'redir': 'https://www.douban.com/',
'form_email': '362416272@qq.com',
}
# 1.创建session对象储存cookie
session = requests.session()
# 2.使用session发起登录请求,主要想要cookie 和session
login_response = session.post(url=login_url, data=data, headers=headers)
# 3.对个人主页发起请求(含session)
url = 'https://www.douban.com/people/187254609/'
response = session.get(url=url, headers=headers)
data = response.text