一. requests基础

1. requets 作用

作用:发送网络请求,返回相应数据
中文文档API:reques介绍

2. requests中解决编码的方法

response.contnet.decode()response.content.decode('gbk')response.text
response.encoding = 'utf-8'

3. response.text 和response.content的区别

response.text:

  • 类型:str
  • 修改编码方式:response.encoding = ‘utf-8’

response.content:

  • 类型:bytes
  • 修改编码方式:response.content.decode(‘utf-8’)

4. 发送简单的请求

response = requests.get(url)response的常用方法
response.text
response.content
response.status_code
response.requests.headers
response.headers

5. 下载图片

import requestsresponse = requests.get('图片url')with open('name.pan', 'wb') as f:f.write(response.content)

6. 发送带header请求

为什么要带上header?
模拟浏览器,欺骗服务器,获取和浏览器一致的内容

header的形式:字典headers = {''User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6'}用法:
requests.get(url,headers=header)

7. 发送代参数的请求

什么叫做请求参数

http://www.webkaka.com/tuo/server/2015/1119
https://www.baidu.com/s?wd=python&c=b参数的形式:字典kw = {'wd':'zero'}
用法:
requests.get(url,params=kw)

8. 练习

贴吧练习:
面向对象的方法

import requestsclass TiebaSpider(object):def __init__(self, tieba_name):self.tieba_name = tieba_nameself.url_temp = "http://tieba.baidu.com/f?kw="+tieba_name+"&ie=utf-8&pn={}"self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'}def parse_url(self,url)'''访问url'''response = requests.get(url,headers=self.headers)return response.textdef save_html(self,url_html, page_num)'''保存页面'''file_path = "《{}》-第{}页".format(self.tieba_name, page_num)with open(file_path+'.html','w') as f:f.write(url_html)def get_url_list(self):'''构造url列表'''#方法1url_list = [ ]fro i in range(10):url_list.append(self.url_temp.format(i*50))return url_list# 方法2return [self.url_temp.format(i*50) for i in range(10)]def run(self):'''主要逻辑'''# 1 构造urlurl_list = self.get_url_list()# 2 访问urlfor url in url_list:url_html = self.parse_url(url)# 3 保存page_num = url_list.index(url) + 1 # 获取页码self.asve_html(url_html, page_num)if __name__ == '__main__'name = input('请输入你想要爬取的论坛名称:')tb_spider = TiebaSpider(name)tb_spider.run()

二. requests进阶

1.发送post请求

那些地方会用到post请求:

  • 登录注册(post比get安全)
  • 传输大文本(post请求对数据长度没有要求)
    爬虫也需要在这两个地⽅模拟浏览器发送post请求

用法

respons = requests.post(url,data= data,headers= headers)

百度翻译案例

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'
}data = {'from': 'en','to': 'zh','query': 'hello','transtype': ' realtime','simple_means_flag': ' 3','sign': '54706.276099','token': 'ae11be6979809815cc7e99bc1b05cb77',
}post_url = 'https://fanyi.baidu.com/v2transapi'response = requests.post(post_url,data= data,headers= headers)
print(response.text)

手机版:

import requests
import json
import sysquery_string = sys.argv[1]headers = {"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like M
}post_data = {#'query':'⼈⽣苦短','query':query_string'from':'zh','to':'en'
}
post_url = 'https://fanyi.baidu.com/basetrans'r = requests.post(post_url,data=post_data,headers=headers)
# print(r)dict_ret = json.loads(r.content.decode())ret = dict_ret['trans'][0]['dst']
print(ret)

2.使用代理

问什么需要代理?

  • 让服务器以为不是同一个客户端在请求
  • 防⽌我们的真实地址被泄露,防⽌被追究

    用法:
# proxies的形式:字典
proxies = {'http':'http://12.34.56.79:9527','https':'http://12.34.56.79:9527',
}requests.get('http://www.baidu.com',proxies = proxies)

案例

import requestsproxies = {'http':'http://117.191.11.112'}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'
}r = requests.get('http://www.baidu.com',proxies = proxies,headers = headers)print(r.sratus_code)

使用代理IP

准备⼀堆的IP地址,组成IP池,随机选择⼀个IP来⽤
检查IP的可⽤性
1.可以使⽤requests检查
2.在线代理IP质量检查的⽹站

cookie和session区别

  • cookie数据存放在客户端的浏览器上,session数据放在服务器上。
  • cookie不是很安全,别⼈可以分析存放在本地的cookie并进⾏cookie欺骗
  • session会在⼀定时间内保存在服务器上。当访问增多,会⽐较占⽤你服
    务器的性能
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制⼀个站点最多保存
    20个cookie

爬⾍处理cookie和session
带上cookie、session的好处:能够请求到登录之后的⻚⾯
带上cookie、session的弊端:⼀套cookie和session往往和⼀个⽤户对应请求
太多,请求次数太多,容易被服务器识别为爬⾍
不需要cookie的时候尽量不去使⽤cookie
但是为了获取登录之后的⻚⾯,我们必须发送带有cookies的请求
session用法:

requests提供了⼀个叫做session类,来实现客户端和服务端的会话保持使⽤⽅法
1 实例化⼀个session对象2 让session发送get或者post请求session = requests.session()
response = session.get(url,headers)

请求登录之后的⽹站的思路:

  • 实例化session
  • 先使用session发送请求,登录对应网站,把cookie保存在session中
  • 在使⽤session请求登录之后才能访问的⽹站,session能够⾃动携带登录成功时保存在其中的cookie,进⾏请求

案例 人人网

import requestssession = requests.session()post_url = "http://www.renren.com/PLogin.do"
post_data = {'email':'xxx@qq.com','password':''}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'
}session.post(post_url,data=post_data,headers=headers)r = session.get('http://www.renren.com/474133869/profile',headers = headers)with open('renren.html.html','w') as f:f.write(r.text)

使用cookies获取登录后的页面

  • cookie过期时间很⻓的⽹站
  • 在cookie过期之前能够拿到所有的数据
  • 配合其他程序⼀起使⽤,其他程序专⻔获取cookie,当前程序专⻔请求⻚⾯
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'
}cookie = 'xxxxxxxx'
cookie = {i.split("=")[0]:i.split("=")[1] for i in cookie.split("; ")}r = requests.get('http://www.renren.com/474133869/profile',headers = headers)with open('renren2.html','w') as f:f.write(r.text)

三. requests小技巧

requests小技巧

1 requests.utils.dict_from_cookiejar 把cookie对象转化为字典
2 请求SSL证书验证
response = requests.get('https://www.12306.cn/mormhweb/',verify=False)
3 设置超时
response = requests.get(url,timeout=10)
4 配合状态码判断是否请求成功
assert response.status_code == 200

URL地址的编解码

requests.utils.uunquote()   # 解码
requests.utils.quote()      # 编码

retrying

import requests
from retrying import retryheaders = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6
@retry(stop_max_attempt_number = 3)}def _parse_url(url):print('代码执⾏了⼏次?')response = requests.get(url,headers=headers,timeout=3)assert response.status_code == 200return response.content.decode()def parse_url(url):try:html_str = _parse_url(url)except:html_str = Nonereturn html_strif __name__ == '__main__':
url = 'http://www.baidu.com'
print(parse_url(url))

学习爬虫第二天 requests库相关推荐

  1. Python 网络爬虫笔记2 -- Requests库实战

    Python 网络爬虫笔记2 – Requests库实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:P ...

  2. Python 网络爬虫笔记1 -- Requests库

    Python 网络爬虫笔记1 – Requests库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyt ...

  3. 爬虫系统基础框架 何时使用爬虫框架? requests库 + bs4来实现简单爬虫

    转载请注明出处https://www.cnblogs.com/alexlee666/p/10180519.html,谢谢! 文中图片来自于我的简书博客. 一. 爬虫用途和本质: 网络爬虫顾名思义即模仿 ...

  4. python3爬虫实战:requests库+正则表达式爬取头像

    python3爬虫实战:requests库+正则表达式爬取头像 网站url:https://www.woyaogexing.com/touxiang/qinglv/new/ 浏览网页:可以发现每个图片 ...

  5. 【Python爬虫学习笔记3】requests库

    在上一篇中学习了urllib库的基本使用,通过它我们可以完成爬虫中发送请求和处理响应的大部分功能,但在实际使用中多少会很繁琐,比如处理Cookie时需要创建handler和opener对象.正因为如此 ...

  6. python爬虫学习实践(一):requests库和正则表达式之淘宝爬虫实战

    使用requests库是需要安装的,requests库相比urllib 库来说更高级方便一点,同时与scrapy相比较还是不够强大,本文主要介绍利用requests库和正则表达式完成一项简单的爬虫小项 ...

  7. Python爬虫利器一Requests库的用法

    之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来简单介 ...

  8. 从零开始写Python爬虫---1.1 requests库的安装与使用

    什么是爬虫? 爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的.所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取下来.这个时候就要用到req ...

  9. 爬虫笔记(一)——Requests库

    文章目录 写在前面 一.Requests库入门 1.Requests库的安装 (1)安装Requests库 (2)测试Requests库 2.Requests库的get()方法 (1) get()方法 ...

最新文章

  1. Xamarin.Forms特殊的视图BoxView
  2. 临时表 DML 产生redo 问题说明
  3. Fibonacci数列整除性质的组合证明
  4. 开始位置 环状图_【技术分享】如何找到压铸模具中真空阀的最佳位置?
  5. android ListView 自动滚动到最底部
  6. [转载] python面向对象编程实例
  7. js随机获取数组中的值
  8. 图(一):图的邻接表表示
  9. 桌面电源、USB、读卡总集线器的想法
  10. ADF12C UI根据row重定位VO的当前行
  11. 短视频app源码开发,Java使用ffmpeg实现音视频分离
  12. 苹果键盘大小写键灯不亮
  13. Electron使用nodejs的坑,Can‘t resolve ‘child_process‘错误
  14. NOI2022退役记
  15. 在64位win10中开启64位ie浏览器的方法(IE11)
  16. 如何用计算机校验信息,Win10如何校验文件哈希值(系统自带方法)?
  17. pb导入excel文件
  18. Python文本分析案例:近体诗格律分析
  19. 4405. 统计子矩阵
  20. beamer中block样式修改

热门文章

  1. USACO 2018 January Contest
  2. LAMMPS模拟in和data文件集合
  3. 短视频源码APP开发——短视频的功能
  4. 英语词汇 talk down to 的中英翻译解释和例子
  5. delta和gamma中性_趣谈希腊字母(Delta和Gamma)
  6. 数据技术-分析报告如何写
  7. 复选框 全选 以及 获取所有选中的值
  8. P02014158 马帅(信息论课程作业)
  9. 如何将两个路由器连接在一起
  10. 计算机常用英语词汇表