requests模块相关用法

requests模块

-1. 什么是requests模块- python原生的一个基于网络请求的模块,模拟浏览器发起请求。
-2. 为什么使用requests模块-1. 自动处理url编码-2. 自动处理post请求参数-3. 简化cookie和代理的操作-3. requests模块如何被使用安装: pip install requests使用流程:1. 指定url2. 使用requests模块发送请求3. 获取响应数据4. 进行持久化存储-4. 通过5个基于requests模块的爬虫项目对该模块进行系统学习和巩固-get请求-post请求-ajax的get-ajax的post-综合

基于requests模块发起get请求

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

import requests 
#指定url
url= 'https://www.sogou.com/'
#发起get请求:get方法会返回成功的响应对象
response = requests.get(url=url)
# 获取响应中的数据值:text可以获取响应对象中字符串形式的页面数据
page_data = response.text
#持久化操作
with open('sogo.html','w',encoding='utf-8') as f:f.write(page_data)
#response对象中其他重要属性
import requests 
#指定url
url= 'https://www.sogou.com/'
#发起get请求:get方法会返回成功的响应对象
response = requests.get(url=url)response.content     #获取的是response对象中二进制(byte)类型的页面数据

response.status_code #返回一个响应状态码如200 或404 

response.headers     #返回响应头信息

response.url         #获取请求的url

requests模块如何处理带参数的get请求(两种方式)

  • 需求:指定一个词条,获取搜狗搜索结果对应的页面数据
    #方式1
    import requestsurl = 'http://www.sogou.com/web?query=金角大王&ie=utf-8'response = requests.get(url=url)page_text = response.textwith open('jinjiao.html','w',encoding='utf-8') as f:f.write(page_text)
    #方式2
    import requestsurl = 'http://www.sogou.com/web'#将参数封装到字典中
    params = {'query':'金角大王','ie':'utf-8'
    }response = requests.get(url=url,params=params)
    page_text = response.textwith open('jinjiao.html','w',encoding='utf-8') as f:f.write(page_text)
    #自定义请求头信息
    import requestsurl = 'http://www.sogou.com/web'#将参数封装到字典中
    params = {'query':'金角大王','ie':'utf-8'
    }
    #自定义请求头信息 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    response = requests.get(url=url,params=params,headers=headers)response.status_code

    基于requests模块发起post请求

    - 需求:登录豆瓣网,获取登录成功后的页面数据
    - tip 如果找不到post请求,试试输错密码寻找
    - 现在豆瓣改版了,只能获取到登录信息cookiesession等类型的东西。但是可以用request.session登录后继续获取页面
    import requests
    #1 指定post请求的url
    url = 'https://accounts.douban.com/j/mobile/login/basic'#封装post请求的参数
    data= {'ck': '','name': '13520750458','password': '1123lys','remember': 'false','ticket':'',
    }
    #自定义请求头信息
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
    }
    #2 发起post请求
    response = requests.post(url=url,data=data,headers=headers)#获取响应对象中的页面数据
    page_text = response.text
    print(page_text)
    #持久化操作
    with open('douban.html','w',encoding='utf-8') as f:f.write(page_text)

    基于ajax的get请求

    - 抓取豆瓣电影上的电影详情的数据
    import requests
    #方式一
    url = 'https://movie.douban.com/j/chart/top_list?type=20&interval_id=100%3A90&action=&start=80&limit=20'
    #自定义请求头信息
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
    }
    response = requests.get(url=url,headers=headers)
    # print(response.text) #返回的是json格式的数据
    import requests
    #方式二
    url = 'https://movie.douban.com/j/chart/top_list?'
    #封装ajax中get请求携带的参数
    params={'type':'20','interval_id':'100:90','action':'','start':'80','limit':'20',}#自定义请求头信息
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
    }
    response = requests.get(url=url,params=params,headers=headers)
    # print(response.text)  #返回的是json格式的数据

    基于ajax的post请求

    -需求 爬取肯德基城市餐厅的位置数据
    import requestsurl = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    # 处理post请求参数
    data = {'cname':'','pid':'','keyword':'北京','pageIndex':'1','pageSize':'10',
    }
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
    }
    #发起基于ajax的post请求
    response = requests.post(url=url,data=data,headers=headers)response.text
    type(response.text)

    总结

    基于ajax的post和get请求和普通的get请求没什么区别,唯一不同就是获取url,ajax要用抓包工具去获取基于ajax的异步请求的url,因为ajax的地址栏的url不变的,必须去获取真正的url

  

requests模块高级(cookie操作):

- cookie:基于用户的用户数据- 需求: 爬取张三用户的豆瓣网的个人主页页面数据
- cookie作用:服务器端使用cookie来记录客户端的状态信息
实现流程:1.执行登录操作(获取cookie)2.在发起个人主页请求时,需要将cookie携带到该请求中注意:session对象:发送请求(会将cookie对象进行自动存储)
import requests
#创建session对象
session = requests.session()
#1 发起登录请求:session对象将cookie获取,且自动存储到session对象中
login_url = 'https://accounts.douban.com/j/mobile/login/basic'
data= {'ck': '','name': '13520750458','password': '1123lys','remember': 'false','ticket':'',
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
#使用session对象发起post请求
login_response = session.post(url=login_url,data=data,headers=headers)#2 对个人主页发起请求(session(cookie)),获取响应页面数据
url = 'https://www.douban.com/people/191748483/'
response = session.get(url=url,headers=headers)
page_text = response.textwith open('douban110.html','w',encoding='utf-8')as f:f.write(page_text)print(page_text)

requests模块高级(代理操作):

- 1 代理:第三方代理本体执行相关的事物
- 2 为什么要使用代理?-反爬手段-反反扒手段
- 3 分类:-正向代理:代理客户端获取数据-反向代理:代替服务端提供数据
- 4 免费代理IP的网站提供商:- www.goubanjia.com- 快代理- 西祠代理
- 5 代码
import requestsurl = 'https://www.baidu.com/s?wd=ip&ie=utf-8'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
#将代理ip封装到字典,(前面url的协议要与代理ip的协议类型相同,如都是https或http,如果不同需修改url的协议)
proxy = {'https':'222.74.237.246:808'
}
#更换网络ip
response = requests.get(url=url,proxies=proxy,headers=headers)with open('./daili.html','wb')as f:f.write(response.content)print(response.content)

综合项目实战

-需求 爬取搜狗知乎某一个词条对应一定范围页码表示的页面数据
import requests
import os# 创建一个文件夹
if not os.path.exists('./pages'):os.mkdir('./pages')
word = input('enter a word')
#动态指定页码范围
start_page = int(input('enter a start pageNum'))
end_page = int(input('enter an end pageNum'))url = 'https://zhihu.sogou.com/zhihu?'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
}
for page in range(start_page,end_page+1):params = {'query':word,'page':page,'ie':'utf-8',      }response = requests.get(url=url,params=params,headers=headers)page_text = response.textfilename = word+str(page)+'.html'filePath = 'pages/'+filenamewith open(filePath,'w',encoding='utf-8') as f:f.write(page_text)print('第%s页写入成功'%page)

 



转载于:https://www.cnblogs.com/lys666/p/10477814.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020-3-22

题目一&#xff1a; JavaScript 天小时分钟和秒倒计时 代码与解析&#xff1a; <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> *{margin:0;padding:0;list-style:none; } body{font-size:…

TeamViewer13 -- 安装、使用说明

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Teamviewer13是一款强大的远程桌面控制工具&#xff0c;同时也是一款非常实用的共享文件传输工具&#xff0c;它拥有简洁的界面以及方便快…

论程序员的自我修炼

摘要&#xff1a;软件开发是个挑战&#xff0c;尤其是对于那些完美主义的程序员。为了想要成为更好的程序员&#xff0c;总会开发出一些特别的功能&#xff0c;在软件设计上想要做到零瑕疵&#xff0c;但事实上&#xff0c;完美的软件设计是根本不存在的&#xff0c;试着让你的…

利用 Charles Proxy 下载旧版本 iOS App

一、软件准备 1、旧版本 iTunes1.IPSW Downloads&#xff1a;https://ipsw.me/2.百度网盘链接&#xff1a;https://pan.baidu.com/s/1PO9Z12o-rqZ_JG68zRqEnA 提取码&#xff1a;fe1v 2、抓包工具 Charles Proxy1.Charles官网链接&#xff1a;https://www.charlesproxy.com/2.百…

禅道8.2-9.2.1注入GetShell

漏洞分析附上某老哥的漏洞分析&#xff0c;来了解下原理。 漏洞利用查看版本&#xff1a;访问Url&#xff1a;http://127.0.0.1/zentao/index.php?modegetconfig即可获取禅道的版本号以及一些其他的信息&#xff0c;目前漏洞存在于v8.2~v9.2确定版本号之后&#xff0c;我们就…

2020-3-23

题目一&#xff1a; JavaScript 复选框全选和全不选 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> body{font-size:12px;} ul{list-style:none} </style> <script type"te…

Maven 依赖-镜像仓库替换为 -- 阿里云镜像仓库(飞快实现 pom 引入)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在本地 maven 的 setting 配置文件中加上阿里云镜像地址就行了&#xff1a; 新增配置内容&#xff1a; <!-- 阿里镜像仓库 --><…

cmake 常用命令

1. 使用日期 # 获取时间 string(TIMESTAMP DATE_TIME "%y-%m-%d %H:%M")# 获取日期 string(TIMESTAMP DATE_VERSION "%m%d") 转载于:https://www.cnblogs.com/ziyu-trip/p/10697309.html

爱屋吉屋病死后,链家、中原、我爱我家们却哭不得笑不得

作为互联网房产中介最快成长为行业独角兽的爱屋吉屋&#xff0c;还是没能迎来开春之暖&#xff0c;于2019年2月19日便停止了运营。对于这个享有创造中国房市273天四轮融资的奇迹、估值超过10亿美元的速成独角兽、一代“革命者”、创造世界纪录的互联网房产神话等多个美誉企业的…

2020-3-24

题目一&#xff1a; JavaScript 页面跳转效果 实现在10秒之后跳转到指定页面。 代码与解析&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <script type"text/javascript"> function countDown(secs,…

清洗肾脏的绝好秘方(图)

清洗肾脏的绝好秘方&#xff1a;只用香菜&#xff0c;可以在家里尝试。不用花多少钱就可清洗你的肾脏。经过多年来&#xff0c;我们的肾脏过滤血液&#xff0c;排除盐&#xff0c;毒素及所有不需要的物质进入我们的身体。随着时日&#xff0c;盐毒积累&#xff0c;这需要进行清…

列表 字典

一、列表 1.定义&#xff1a; stus ["s1","s2","s3","s4","s5","s6","s7"] #List 列表 数组用中括号定义&#xff0c;逗号隔开 stus2 [] #空的列表stus3 list() #空的列表 【定义空的列表便于往里…

MySQL执行外部sql脚本文件的命令( source命令执行sql )

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 sql脚本是包含一到多个sql命令的sql语句&#xff0c;我们可以将这些sql脚本放在一个文本文件中&#xff08;我们称之为“sql脚本文件”&…

【案例】数据量猛增,BI分析效率太低怎么破?

2019独角兽企业重金招聘Python工程师标准>>> 近日&#xff0c;Apache Kylin Innovation Meetup 在上海成功举办&#xff0c;有近200位小伙伴来到了现场。此次会议特别邀请到了金融、互联网等行业的技术伙伴分享了 Kylin 在行业中的实操应用 。今天将首先与大家分享演…

2020-3-25

题目一&#xff1a; JavaScript 数组随机不重复元素 实际应用可能需要从数组元素中随机取出几个元素&#xff0c;并且要保证这几个元素不重复。 有些数组可能有重复的元素&#xff0c;那么可能需要首先去除这些重复的元素。 代码与解析&#xff1a; var theArray[1,3,2,4,5,9,…

人生要小心处理的事

被人羞辱——翻脸不如翻身生气不如争气 有个成语叫做“恼羞成怒”&#xff0c;意思就是说&#xff0c;由于羞愧和恼恨而发怒。被人无情羞辱&#xff0c;只要是有自尊心的人都会愤怒&#xff0c;但问题是&#xff0c;愤怒过后你还会剩下什么?你是马上报复&#xff0c;以牙还牙;…

刷新SWAP分区方法

Linux VPS的使用过程中&#xff0c;SWAP交换分区是一个很重要系统缓存分区。他是在内存不够用的情况下&#xff0c;从硬盘中临时分出一部分空间系统当做内存使用。但是&#xff0c;如果SWAP的占用超过30%的时候&#xff0c;系统的性能就会受到影响&#xff0c;这时候就要刷新SW…

您收到一封 2019 阿里云峰会 (北京) 邀请函

为什么80%的码农都做不了架构师&#xff1f;>>> 摘要&#xff1a; 阿里云峰会&#xff08;北京&#xff09;开发者专场以“云原生和可见的云未来”为主题&#xff0c;不仅涵盖 2 场重大发布&#xff0c;更设置人工智能、机器学习、实时计算、云原生实践等国内外最热…

解决Based on configured schedule, the given trigger ‘triggerGroupName_FREEZE_JOB.triggerName_FREEZE...

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题、如下&#xff1a; Caused by: org.quartz.SchedulerException: Based on configured schedule, the given trigger triggerG…

2020-3-26

题目一&#xff1a; JavaScript 获取第n个li元素 下面有两种方法 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> ul{list-style:none} </style> <script> window.onloadfunct…