爬虫(1):requests模块
requests介绍:
reqeusts模块:python原生一个基于网络请求的模块,模拟浏览器发起请求。
requests模块的优点:
- 1.自动处理url编码
- 2.自动处理post请求的参数
- 3.简化cookie的代理的操作:
cookie操作:
- 创建一个cookiejar对象
- 创建一个handler对象
- 创建一个operner 代理操作:
- 创建handler对象,代理ip和端口封装到该对象
- 创建openner对象
reqeusts的使用流程:
- 安装:pip install requests
- 使用流程:
- 1.指定url
- 2.使用requests模块发起请求
- 3.获取响应数据
- 4.进行持久化存储
requests的使用:
一、 requests基础用法:
1. 基于requests模块发起get请求
需求:爬取搜狗首页的页面数据
import requests
#指定url
url = 'https://www.sogou.com/' #发起get请求:get方法会返回请求成功的相应对象
response = requests.get(url=url) #获取响应中的数据值:
page_data = response.text # text可以获取响应对象中 字符串 形式的页面数据 print(page_data) #持久化操作
with open('./sougou.html','w',encoding='utf-8') as fp:
fp.write(page_data)
response对象其他的属性:
#response对象中其他重要的属性
import requests
#指定url
url = 'https://www.sogou.com/' # requests.get() :发起get请求:get方法会返回请求成功的相应对象
response = requests.get(url=url) # response.content 获取的是response对象中二进制(byte)类型的页面数据
#print(response.content) # response.status_code :返回一个响应状态码
#print(response.status_code) # response.headers :返回响应头信息
#print(response.headers) # response.url :获取请求的url
#print(response.url)
requests 发送携带 参数 的 get 请求:
需求:指定一个词条,获取搜狗搜索结果所对应的页面数据
方式一:
import requests url = 'https://www.sogou.com/web?query=周杰伦&ie=utf-8' # 参数直接放到 url 中 response = requests.get(url=url)
page_text = response.text with open('./zhou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
方式二:
import requests
#自定义请求头信息
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请求参数;放到一个字典中
prams = {
'query':'周杰伦',
'ie':'utf-8'
}
#发起请求
response = requests.get(url=url,params=param) # 设置 params=param response.status_code
自定义请求头信息:
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_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
} response = requests.get(url=url,params=params,headers=headers) # 设置 headers=headers 请求头 response.status_code
2. 基于requests模块发起的post请求:
需求:登录豆瓣网,获取登录成功后的页面数据
import requests #1.指定post请求的url
url = 'https://accounts.douban.com/login' #封装post请求的参数;POST请求的请求体信息要放在一个字典中
data = {
"source": "movie",
"redir": "https://movie.douban.com/",
"form_email": "",
"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',
} #2.发起post请求
response = requests.post(url=url,data=data,headers=headers) # data=data 设置请求体信息 #3.获取响应对象中的页面数据
page_text = response.text #4.持久化操作
with open('./douban.html','w',encoding='utf-8') as fp:
fp.write(page_text)
3.基于 Ajax的GET请求:
需求:抓取豆瓣电影上电影详情的数据
import requests url = 'https://movie.douban.com/j/chart/top_list?' #封装ajax的get请求中携带的参数;字典的形式
params = {
'type':'',
'interval_id':'100:90',
'action':'',
'start':'',
'limit':''
}
#自定义请求头信息
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.get(url=url,params=params,headers=headers) # params=params 设置 ajax 请求中携带的参数
print(response.text)
4. 基于 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_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
} #2发起基于ajax的post请求
response = requests.post(url=post_url,headers=headers,data=data) # data=data 设置 ajax 请求体中的参数 response.text
5. 综合使用:
需求:爬取搜狗知乎某一个词条对应一定范围页码表示的页面数据
import requests
import os #创建一个文件夹
if not os.path.exists('./pages'):
os.mkdir('./pages') word = input('enter a word:') # 动态传入要爬取的词条 #动态指定页码的范围
start_pageNum = int(input('enter a start pageNum:'))
end_pageNum = int(input('enter a end pageNum:')) #自定义请求头信息
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',
}
#1.指定url:设计成一个具有通用的url
url = 'https://zhihu.sogou.com/zhihu' for page in range(start_pageNum,end_pageNum+1):
param = {
'query':word,
'page':page,
'ie':'utf-8'
}
response = requests.get(url=url,params=param,headers=headers) #获取响应中的页面数据(指定页码(page))
page_text = response.text #进行持久化存储
fileName = word+str(page)+'.html'
filePath = 'pages/'+fileName
with open(filePath,'w',encoding='utf-8') as fp:
fp.write(page_text)
print('第%d页数据写入成功'%page)
二、requests模块的高级用法:
1. reqeusts模块的cookie操作:
- cookie:
基于用户的用户数据
- 需求:爬取张三用户的豆瓣网的个人主页页面数据
- cookie作用:服务器端使用cookie来记录客户端的状态信息。
实现流程:
1.执行登录操作(获取cookie)
2.在发起个人主页请求时,需要将cookie携带到该请求中
注意:reqeusts模块的session对象:发送请求(会将cookie对象进行自动存储)
示例:
import requests session = requests.session() # 利用 requests.session() 去获取到一个 session 对象;该 session 对象能够保存服务器返回给客户端的cookie
#1.发起登录请求:将cookie获取,切存储到session对象中
login_url = 'https://accounts.douban.com/login'
data = {
"source": "None",
"redir": "https://www.douban.com/people/185687620/",
"form_email": "",
"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',
}
#使用session发起post请求
login_response = session.post(url=login_url,data=data,headers=headers) # 利用 requests 的 session对象 发送 POST请求;通过服务器的校验后该 session对象会保存 cookie #2.对个人主页发起请求(session(cookie)),获取响应页面数据
url = 'https://www.douban.com/people/185687620/'
response = session.get(url=url,headers=headers) # 利用 session对象 发送 GET请求(携带着cookie)
page_text = response.text with open('./douban110.html','w',encoding='utf-8') as fp:
fp.write(page_text) # 注意: 爬虫程序应该严格遵从浏览器的请求流程
2. requests模块的代理操作:
- 1.代理:第三方代理本体执行相关的事物。生活:代购,微商,中介
- 2.为什么要使用代理?
- 很多网站有反爬操作;
- IP代理是一种反反爬手段
- 3.分类:
- 正向代理:代替客户端获取数据 (我们的爬虫用的是 正向代理)
- 反向代理:代理服务器端提供数据
- 4.免费代理ip的网站提供商:
- www.goubanjia.com (推荐用这个)
- 快代理
- 西祠代理
示例:
import requests url = 'http://www.baidu.com/s?ie=utf-8&wd=ip' 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',
} #将代理ip封装到字典;代理的协议应该和 url 中的协议一致,如:都是 http
proxy = {
'http':'77.73.69.120:3128'
}
#更换网路IP
response = requests.get(url=url,proxies=proxy,headers=headers) # proxies=proxy 设置代理 with open('./daili.html','w',encoding='utf-8') as fp:
fp.write(response.text)
爬虫(1):requests模块的更多相关文章
- 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块
孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...
- Python爬虫练习(requests模块)
Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...
- 爬虫之requests模块
requests模块 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的 ...
- 04.Python网络爬虫之requests模块(1)
引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...
- 06.Python网络爬虫之requests模块(2)
今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...
- Python 爬虫二 requests模块
requests模块 Requests模块 get方法请求 整体演示一下: import requests response = requests.get("https://www.baid ...
- Python网络爬虫之requests模块(2)
session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 有些时候,我们在使用爬 ...
- Python网络爬虫之requests模块(1)
引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...
- Python网络爬虫之requests模块
今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...
- 爬虫概念 requests模块
requests模块 - 基于如下5点展开requests模块的学习 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能 ...
随机推荐
- NDK(10)Android.mk各属性简介,Android.mk 常用模板--未完
参考 : http://blog.csdn.net/hudashi/article/details/7059006 1. Android.mk简介 Android.mk文件是GNU Makefile的 ...
- YUM报错及解决办法
[root@xuegod60 ~]# yum clean all Loaded plugins: product-id, refresh-packagekit, security, subscript ...
- [书目20140902]实战Windows Azure——微软云计算平台技术详解 --徐子岩
目录第1章 云计算技术简介 1.1 云计算所要解决的问题 1.2 云计算平台的分类 1.3 微软云计算平台Windows Azure 1.3.1 高可用性 ...
- Java 线程是什么-渐入佳境
线程:(一)什么是线程 管哥说:程序中有多个执行流就叫多线程.多线程是多任务的一种特别的形式.好处:单个程序可以创建多个并发执行的程序来完成各自的任务.多线程能满足程序员编写高效率的程序来达到充分利用 ...
- 面试题6:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList
题目 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路 使用栈依次存放输入的链表顺序的值,然后依次出栈便是链表的逆序. 代码 import java.util.ArrayList ...
- VB6程序中NULL注意事项
VB6中从数据库中取出栏位值进行操作,若栏位值为Null,则必须小心处理,否则极易导致程序出错退出. 通常我们从recordset中取出栏位值采用Fields方法,加上栏位名称,如 rsMoney.F ...
- arcpy利用XY创建点
# -*- coding: utf-8 -*-"""Created on Sun Apr 7 15:32:24 2019@author: ""&quo ...
- laravel easywechat服务器故障问题
该公众号提供的服务出现故障,请稍后再试 laravel的 csrf,因为laravel框架自带了这个,微信请求肯定没有这个,所以不成功!所以你要么关了csrf,要么,把微信请求的这个地址放在设置外! ...
- fedora27安装ssh
Fedora安装sshd 先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server openssh-server-5.3p1-1 ...
- createlang - 定义一种新的 PostgreSQL 过程语言
SYNOPSIS createlang [ connection-option...] langname [ dbname] createlang [ connection-option...] -- ...