requests模块使用

requests介绍

python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高,
作用是模拟浏览器发请求。

requests模块的编码流程

  1. 指定URL
  2. 发送请求
  3. 获取相应数据
  4. 持久化存储

环境安装

pip install requests

实战编码

需求:爬取搜狗首页的页面数据

import requests
# 一、指定url
url = 'https://www.sogou.com/'
# 二、发送请求
# 三、用get请求返回一个响应对象
response = requests.get(url=url)
# 获取响应数据
page_text = response.text
# 四、持久化存储
with open('sougou.html', 'w', encoding='utf-8') as fp:
    fp.write(page_text)

实战巩固

1、爬取搜狗指定词条对应的搜索结果页面

查看方式

分析

请求方式为:GET方式

请求url为:https://www.sogou.com/web

常规

响应头返回的 Content-Type 类型为: text/html

响应头

携带的参数:其中 query为我们搜索的内容

参数

代码


import requests


# UA伪装:将对应的 User-Agent 封装到一个字典(请求头)中
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50'
}

url = 'https://www.sogou.com/web'
# 处理url携带的参数:封装到字典中
kw = input("输入关键词\n")
param = {
    'query': kw
}

# 对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url, params=param, headers=headers)
page_text = response.text
fileName = kw+'.html'

# 持久化存储
with open(fileName, 'w', encoding='utf-8') as fp:
    fp.write(page_text)

2、破解百度翻译

信息查看方法

分析

请求方式为:POST方式

请求url为:https://fanyi.baidu.com/sug

常规

响应头返回的 Content-Type 类型为: application/json

响应头

携带的参数:其中 kw为我们搜索的单词

参数

代码


import json
import requests

# UA伪装:将对应的 User-Agent 封装到一个字典中
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50'
}

url = 'https://fanyi.baidu.com/sug'
kw = input('翻译输入:\n')
data = {
    'kw': kw
}

response = requests.post(url=url, data=data, headers=headers)
# 获取响应数据:json方法返回的是一个json对象(如果确实响应数据类型为json类型才能使用:Content-Type: application/json)
result = response.json()
# 输出翻译结果
print('翻译结果:')
for word in result['data']:
    print(word['k'], word['v'])
# 持久化存储
fp = open('{}.json'.format(kw), 'w', encoding='utf-8')
json.dump(result, fp=fp, ensure_ascii=False)

3、爬取豆瓣电影分类排行榜

查看方式

分析

请求方式为:GET方式

请求url为:https://movie.douban.com/j/chart/top_list

常规

响应头返回的 Content-Type 类型为: application/json

响应头

携带的参数:

type:分类对应的编号

start: 开始的排名(排名从0开始)

limit: 排名的个数

参数

代码

import json
from unittest import result
import requests
url = 'https://movie.douban.com/j/chart/top_list'

# UA伪装:将对应的 User-Agent 封装到一个字典中
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50'
}

param = {
    'type': '24',
    'interval_id': '100:90',
    'action': '',
    'start': '0',
    'limit': '100'
}

response = requests.get(url=url, params=param, headers=headers)
result = response.json()

# 输出结果
for moive in result:
    print('排名:{0},电影名:{1}'.format(moive['rank'], moive['title']))


# 持久化存储
fp = open('douban.json', 'w', encoding='utf-8')
json.dump(result, fp=fp, ensure_ascii=False)

json格式化工具

作业:肯德基餐厅信息爬取

需求:在肯德基餐厅信息查询网站爬取餐厅信息

输入:城市

输出:餐厅名称、餐厅地址、详情

肯德基信息查询

代码:


import json
import requests
from fake_useragent import UserAgent
url = 'https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
keyword = input('请输入要查询的城市:')
# 请求携带参数
data = {
    'cname': '',
    'pid': '',
    'keyword': keyword,
    'pageIndex': '1',
    'pageSize': 10000
}
# 随机UA伪装
headers = {
    'User-Agent': UserAgent().random
}
# 获取响应数据
response = requests.post(url=url, headers=headers, data=data)
reture_data = response.text
# 持久化存储
fp1 = open('肯德基餐厅信息.json', 'w', encoding='utf-8')
json.dump(obj=reture_data, fp=fp1, ensure_ascii=False)
fp1.close()
# 数据可视化
result = json.loads(reture_data)
fp2 = open('肯德基餐厅表.csv', 'w', encoding='utf-8')
fp2.write('编号,餐厅名称,餐厅地址\n')
for pos in result['Table1']:
    fp2.write('{0},{1},{2}\n'.format(
        pos['rownum'], pos['storeName'], pos['addressDetail']))

fp2.close()
print('总共有{0}个结果,数据保存成功'.format(result['Table'][0]['rowcount']))
最后修改:2022 年 02 月 19 日
如果觉得我的文章对你有用,请随意赞赏