一、request模块介绍

1. 什么是request模块

   - python中原生的基于网络请求的模块,模拟浏览器发起请求。

2. 为什么使用request模块

   - urllib需要手动处理url编码,quote()。
- urllib需要手动处理post请求参数。
- cookie的代理操作比较繁琐
1. cookie
- 创建一个cookiejar对象
- 创建一个handler对象
- 创建一个openner
2. 代理
- 创建handler对象,代理ip和端口分装到该对象
- 创建openner对象

3. request如何被使用

   - 安装:pip install requests
- 使用流程:
1. 指定URL
2. 使用request模块发起请求
3. 获取响应数据
4. 进行持久化储存

3.通过5个基于request模块的爬虫项目对该模块进行系统学习和巩固

   - get请求
- post请求
- 基于ajax的get请求
- 基于ajax的post请求
- 综合项目

二、项目实战

3. 基于request模块发起一个get请求

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

import requests

# 指定url
url = 'https://www.sogou.com/' # 发起get请求:get方法会返回请求成功的响应对象
response = requests.get(url=url) # 获取响应中的数据值:text可以获取响应对象中字符串形式的页面数据
page_data = response.text # 持久化操作
with open('./sougou.html','w',encoding='utf-8') as fp:
fp.write(page_data)

response对象中其他重要的属性

import requests

# 指定url
url = 'https://www.sogou.com/' # 发起get请求:get方法会返回请求成功的响应对象
response = requests.get(url=url) # content获取的是response对象中二进制(byte)类型的页面数据
# print(response.content) # 返回一个响应状态码
# print(response.status_code) # 响应头信息
# print(response.headers) # 获取请求的url
# print(response.url)

4. 携带参数的get请求方式1

import requests

url = 'https://www.sogou.com/web?query=周杰伦&ie=utf-8'

response = requests.get(url=url)

page_text = response.text

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

5. 携带参数的get请求方式2

import requests

url = 'https://www.sogou.com/web'

# 将参数封装到字典中
params = {
'query':'周杰伦',
'ie':'utf-8',
} requests.get(url=url,params=params) print(response.text)

6. 自定义请求头信息

import requests

url = 'https://www.sogou.com/web'

# 将参数封装到字典中
params = {
'query':'周杰伦',
'ie':'utf-8',
} # 自定义请求头信息
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
} response = requests.get(url=url,params=params,headers=headers) print(response.status_code)

7. 基于requests模块发起的post请求

需求:登陆豆瓣网,获取登陆成功后的页面数据

import requests

# 1. 指定post请求的url
url = 'https://accounts.douban.com/login' # 封装post请求的参数
data = {
'source':'movie',
'redir':'https://movie.douban.com/',
'form_email':'account',
'form_password':'password',
'login':'登陆',
} # 自定义请求头信息
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
} # 2. 发起post请求
response = requests.post(url=url,data=data,headers=headers) # 3. 获取响应对象中的页面数据
page_text = response.text # 4. 持久化操作
with open('./douban.html','w',encoding='utf-8') as fp:
fp.write(page_text)

8. 基于Ajax的get请求

需求:抓取豆瓣电影上电影详情的数据

import requests

url =  'https://movie.douban.com/j/chart/top_list?'

# 封装ajax的get请求中携带的参数(系统自带的抓包工具下面的Query String)
params = {
'type': '',
'interval_id': '100:90',
'action':'',
'start': '',
'limit': '',
} # 自定义请求头信息
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
} response = requests.get(url=url,params=params,headers=headers) print(response.text)

9. 基于Ajax的post请求

需求:爬取肯德基城市餐厅位置数据

import requests

# 1. 指定url
post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' # 处理post请求
data = {
'cname': '',
'pid': '',
'keyword': '北京',
'pageIndex': '',
'pageSize': '',
} # 自定义请求头信息
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
} # 2. 发起基于ajax的post请求
response = requests.post(url=post_url,headers=headers,data=data) print(response.text)

总结:普通的get和post的请求一般从地址栏获取url。ajax是一个局部刷新的异步请求,我们不能从地址栏获取ajax的url,要借助抓包工具获取地址。

10. 综合项目实战

需求:爬取搜狗知乎某一个词条对应一定范围页码表示的页面

import requests
import os # 创建一个文件夹
if not os.path.exists('./pages'):
os.mkdir('./pages') word = input('enter a word:') # 动态指定页码的范围
start_page_number = int(input('enter a start page number'))
end_page_number = int(input('enter a end page nunber')) # 自定义请求头信息
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
} # 1. 指定url:设计成一个具有通用的url
url = 'https://zhihu.sogou.com/zhihu'
for page in range(start_page_number,end_page_number + 1):
params = {
'query':word,
'page':page,
'ie':'utf-8',
}
response = requests.get(url=url,params=params,headers=headers) # 获取响应中的页面数据(指定页码(page))
page_text = response.text # 持久化存储
file_name = word + str(page) + '.html'
file_path = 'pages/' + file_name
with open(file_path,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(f'第{page}页数据写入成功')

爬虫之requests模块基础的更多相关文章

  1. 03爬虫-requests模块基础(1)

    requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...

  2. 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块

    孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...

  3. Python爬虫练习(requests模块)

    Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...

  4. 06.Python网络爬虫之requests模块(2)

    今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...

  5. 网络爬虫之requests模块的使用+Github自动登入认证

    本篇博客将带领大家梳理爬虫中的requests模块,并结合Github的自动登入验证具体讲解requests模块的参数. 一.引入:   我们先来看如下的例子,初步体验下requests模块的使用: ...

  6. Python爬虫(requests模块)

     Requests是唯一的一个非转基因的Python HTTP库,人类可以安全享用. Requests基础学习 使用方法: 1.导入Requests模块: import requests 2.尝试用g ...

  7. 爬虫之requests模块

    requests模块 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的 ...

  8. 04.Python网络爬虫之requests模块(1)

    引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...

  9. Python 爬虫二 requests模块

    requests模块 Requests模块 get方法请求 整体演示一下: import requests response = requests.get("https://www.baid ...

随机推荐

  1. day010-缓冲流、转换流、序列化流

    1.     缓冲流 又称为高效流.高效流高效的原理:使用缓冲区(数组)临时存储多个数据,减少底层资源的调用次数.从而提高读写速度. 1.1 缓冲流分类 字节缓冲流: BufferedOutputSt ...

  2. iBrand 开源电商小程序 (Laravel API+ webpack + gulp + 原生小程序)

    iBrand 社交电商产品正式进入开源过程中了,我们制定了详细的开源计划,目前已经发布了 V1 的版本,后续的版本也在陆续整理完善中. 各个版本功能明细如下图: 3 个版本计划在今年春节前全部完成,可 ...

  3. 屏幕  z

    private   void   FullScreen()   //全屏      {      SizeMode   =   2;      FormBorderStyle   =   FormBo ...

  4. C语言 宏的定义

    #include <stdio.h> // NUM叫做宏名 // 6是用来替换宏名的字符串 #define NUM 6 #define mul(a, b) ((a)*(b)) void t ...

  5. IOS 摇一摇的方法

    ● 监控摇一摇的方法 ● 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂) ● 方法2:iOS自带的Shake监控API(非常简单) ● 判断摇一摇的步骤:实现3个摇一摇监听方法 ● ...

  6. Android(java)学习笔记55:LayoutInflater 和 findViewById

    1. 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById(). 不同点是LayoutInflater是用来找res/layout/下的xml布局文件, ...

  7. Thread control block & thread

    https://en.wikipedia.org/wiki/Thread_control_block Thread Control Block (TCB) is a data structure in ...

  8. [学习笔记] numpy次成分分析和PCA降维

    存个代码,以后参考. numpy次成分分析和PCA降维 SVD分解做次成分分析 原图: 次成分复原图: 代码: import numpy as np from numpy import linalg ...

  9. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B Tomb Raider 【二进制枚举】

    任意门:http://hihocoder.com/problemset/problem/1829 Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 L ...

  10. 三角测量(Triangulation)

    三角测量(Triangulation)是视觉定位中,已知多个相机位置和空间中一点的投影点,进一步求该点3D位置的方法.三角测量是Pose Estimation的相反过程,求出相机位置后,图像中其它特征 ...