requests是基于urllib3的一个用于发起http请求的库(中文文档)
数据采集流程:
- 指定url>>
- 基于
- requests模块发起请求>>
- 获取响应中的数据>>
- 数据解析>>
- 进行持久化存储
1.模块安装
pip install requests
2.requests之request请求
2.1请求方式
常用的就是requests.get()和requests.post()
1 #各种请求方式:常用的就是requests.get()和requests.post() 2 import requests 3 requests.get('https://api.github.com/events') 4 requests.post('http://httpbin.org/post', data = {'key':'value'}) 5 requests.put('http://httpbin.org/put', data = {'key':'value'}) 6 requests.delete('http://httpbin.org/delete') 7 requests.head('http://httpbin.org/get') 8 requests.options('http://httpbin.org/get')
2.2请求url
在数据采集之前,要通过页面的加载方式(静态加载还是动态加载)确定需要获取资源的url(可以参考爬虫简介实例)
2.3请求头
如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。
有些网站为了拒绝通过程序代码的请求,会在接收请求时会对发起请求的载体进行校验,请求头中的‘User-Agent’参数就是请求载体的唯一标识,因此一般需要定制请求头加入载体标识,这也是其中一种反反爬策略:UA伪造。
方式一:唯一指定请求载体身份
1 import requests 2 headers={ 3 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' 4 } 5 response=requests.get('http://www.baidu.com',headers=headers) 6 print(response.encoding)#百度编码格式为ISO-8859-1 7 response.encoding='utf-8' 8 print(response.text)
方式二:通过fake-useragent随机生成
1 import requests 2 3 from fake_useragent import UserAgent#pip install fake-useragent模块 4 UA=UserAgent()#实例化创建请求载体对象 5 headers={ 6 'User-Agent':UA.random#随机获取一个请求载体 7 } 8 # print(headers) 9 10 response=requests.get('http://www.baidu.com',headers=headers) 11 print(response.encoding)#百度编码格式为ISO-8859-1 12 response.encoding='utf-8' 13 print(response.text)
2.3请求参数
2.3.1 get请求参数----params
get请求通过URL的查询字符串(querystring)传递某种数据。如果你是手工构建URL,那么数据会以键值对的形式置于URL中,跟在一个问号的后面。例如, https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action=&qq-pf-to=pcqq.c2c(豆瓣动作片评分)。 Requests允许你使用params关键字参数,以一个字符串字典来提供这些参数。
1 import requests 2 from fake_useragent import UserAgent 3 UA=UserAgent() 4 headers={'User-Agent':UA.random} 5 6 START=0 7 END=2000#如果循环爬取,起始位置数据计数会有大量重复,因此设置起始值爬取 8 f=open('豆瓣动作片评分.txt','w',encoding='utf-8') 9 10 url=f'https://movie.douban.com/j/chart/top_list' 11 params={ 12 'type':'5', 13 'interval_id':'100:90', 14 'action':'', 15 'start':START, 16 'limit':END, 17 } 18 response = requests.get(url=url, params=params, headers=headers) 19 data=response.json() 20 21 for movie in data: 22 f.write(f'{movie["rank"]}\t{movie["title"]}\t{movie["score"]}\n') 23 24 f.close()