Requests模块

简介

1. requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。

2. 使用流程
- 指定url
- 基于requests模块发起请求
- 获取响应对象中的数据值
- 持久化存储

案例

1. 爬取搜狗制定词条搜索后的页面数据

import requests

# 指定搜索关键字
word = input('输入词语: ')
# 自定义请求头信息
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
}
# 第一步: 指定url
url = 'https://www.sogou.com/web'
# 封装get请求参数
param = {
'query':word,
'ie':'utf-8'
}
# 第二步: 发起请求 (get方法的返回值就是一个响应对象)
response = requests.get(url=url,params=param)
# 设置响应数据的编码方式
response.encoding='utf-8'
# 第三步: 获取响应数据 (text属性返回的是字符串形式的响应数据)
page_text = response.text
# 第四步: 持久化存储
with open('./sougou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
请求载体身份标识的伪装:

User-Agent:请求载体身份标识,通过浏览器发起的请求,请求载体为浏览器,则该请求的User-Agent为浏览器的身份标识,使用爬虫程序发起的请求,则该请求的载体为爬虫程序,则该请求的User-Agent为爬虫程序的身份标识。可以通过判断该值来获知该请求的载体究竟是基于哪款浏览器还是基于爬虫程序。

反爬机制:某些门户网站会对访问该网站的请求中的User-Agent进行捕获和判断,如果该请求的UA为爬虫程序,则拒绝向该请求提供数据。

反反爬策略:将爬虫程序的UA伪装成某一款浏览器的身份标识。

2. 登录豆瓣电影,爬取登录成功后的页面数据

import requests
url = 'https://accounts.douban.com/login'
# 封装请求参数
data = {
"source": "movie",
"redir": "https://movie.douban.com/",
"form_email": "15027900535",
"form_password": "bobo@15027900535",
"login": "登录",
}
# 自定义请求头信息
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
}
response = requests.post(url=url, data=data)
page_text = response.text

with open('./douban.html','w',encoding='utf-8') as fp:
fp.write(page_text)

3. 爬取豆瓣电影分类排行榜中的电影详情数据

# 页面中有些情况下会包含动态加载的数据
import requests

# 指定ajax-get请求的url(通过抓包进行获取)
url = "https://movie.douban.com/j/chart/top_list"

# 定制请求头信息,相关的头信息必须封装在字典结构中
headers = {
# 定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}

# 定制get请求携带的参数(从抓包工具中获取)
param = {
"type": "5",
"interval_id": "100:90",
"action": "",
"start": "0",
"limit": "60",
}

# 发起get请求,获取响应对象
response = requests.get(url=url, headers=headers,params=param )
# 获取响应内容:响应内容为json串
print(response.json())

4.爬取百度翻译, 获取返回结果的数据

# 页面中存在动态加载的数据, 通过ajax局部刷新的数据, 去获取局部刷新的url (NetWork -> XHR)
import requests

url = "https://fanyi.baidu.com/sug"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
word = input(">>>: ")
data = {
"kw":word
}
word_json = requests.post(url=url, headers=headers, data=data).json()
print(word_json)

5.爬取肯德基餐厅查询中指定地点的餐厅数据

import requests
url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
lst = []
for i in range(1, 5):
data = {
"cname": "",
"pid": "",
"keyword": "北京",
"pageIndex": str(i),
"pageSize": "10"
}
response = requests.post(url=url, headers=headers, data=data).json()
lst.append(response)

print(lst)

6.爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据

# http://125.35.6.84:81/xk/
import requests
s1_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList"
s2_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
lst = []
for i in range(1, 5):
data = {
"on": "true",
"page": str(i),
"pageSize": "15",
"productName": "",
"conditionType": "1",
"applyname": "",
"applysn": "",
}
s_id = requests.post(url=s1_url, headers=headers, data=data).json()
for item in s_id["list"]:
# 用于二级页面数据获取
lst.append(item["ID"])

ls = []
for y in lst:
data1 = {
"id": str(y)
}
s2_id = requests.post(url=s2_url, headers=headers, data=data1).json()
ls.append(s2_id)
print(ls)
- 首页中的企业信息是动态加载出来的
- 首页中的企业信息是通过ajax请求获取的 (ID)
- 企业详情页中的详情数据也是动态加载出来
- 企业详情数据是通过ajax动态请求(url:域名都统一一样 携带的参数(ID)不一样)到的(企业的详情信息)
posted @ 2019-06-27 10:03  言值  阅读(146)  评论(0编辑  收藏  举报