Requests是唯一的一个非转基因的Python HTTP库,人类可以安全享用。

Requests基础学习

使用方法:

1.导入Requests模块:

import requests

2.尝试用get获取某个页面,以百度为例子

url = 'http://www.baidu.com'
r = requests.get(url)

r是一个response对象。可以从这个对象中获取所有想要的信息。

 发送简单get的请求:

response.text和response.content的区别:

response.text

  • 返回类型:str
  • 解码类型:根据HTTP头部对响应的编码作出有根据的推测的文本编码
  • 如何修改编码方式:response.encoding = 'gbk'

response.content

  • 返回类型:bytes
  • 解码类型:没有指定
  • 如何修改编码方式:response.content.decode('ut8-f')

实例:获取百度图片

import requests
url = 'https://www.baidu.com/img/bd_logo1.png'
response = requests.get(url)
with open('baidu.png','wb') as p:
p.write(response.content)

发送带header的get请求:

 发送带参数的get请求:

实战(贴吧爬虫):

import requests

class TiebaSpider:
#构造函数,传入想要查询的贴吧名字和查询前num页,定义后面方法需要用的属性
def __init__(self,tieba_name,tieba_num):
self.tieba_num = tieba_num
self.tieba_name = tieba_name
#下面为url访问的格式,kw为贴吧名,pn为代表页数,贴吧可查首页pn=0,第一页50,第二页100,以此类推
self.url_temp = "https://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}"
#模仿网页访问贴吧
self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"} #获取url列表
def get_urlList(self):
url_list = []
for i in range(self.tieba_num):
url_list.append(self.url_temp.format(i * 50))
return url_list #访问网页,解析网页,返回
def parse_url(self,url):
response = requests.get(url,headers=self.headers)
return response.text #或者response.content.decode('utf-8') #保存网页
def save_html(self,html_str,page_num):
file_path = "{}-第{}页.html".format(self.tieba_name,page_num)
with open(file_path,'w',encoding='utf-8') as f:
f.write(html_str) def run(self):
url_list = self.get_urlList()
for url in url_list:
html_str = self.parse_url(url) #保存的内容
page_num = url_list.index(url) + 1 #文件的页码
self.save_html(html_str,page_num) def main():
tieba_name = input('请输入想查询的贴吧名:')
tieba_num = int(input('请输入想要查询前几页:'))
tieba = TiebaSpider(tieba_name, tieba_num)
tieba.run() if __name__ == '__main__':
main()

Requests深入学习

发送post请求

哪些地方我们会用到POST请求:

  • 登录注册(POST比GET更安全)
  • 需要传输大文本内容的时候(POST请求对数据长度没有要求)
  • 所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求

使用代理

为什么爬虫需要使用代理

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

用法:request.get('http://www.baidu.com',proxies = proxies)

proxies的形式:字典

proxies = {

  "http" : "http://12.34.56.79:9527",

  "https" : "http://12.34.56.79:9527",

}

步骤:

  • 准备一堆IP地址,组成ip池,随机选择一个ip来使用
  • 随机选择代理ip,让使用次数较少的ip地址有更大的可能性被用到
    • {"ip" : ip,"time",0}
    • [{},{},{},{},]对这个ip列表进行排序,按照使用次数进行排序
    • 选择使用次数较少的10个ip,从中随机选择一个
  • 检查ip的可以性
    • 可以使用requests添加超时参数,判断ip地址的质量
    • 在线代理ip质量检测的网站

爬虫处理cookie和session

带上cookie,session的好处:

  能够请求到登录之后的页面

带上cookie,session的弊端:

  一套cookie和session往往和一个用户对应,请求太快或者太多,容易被服务器识别为爬虫

不需要cookie的时候尽量不去使用cookie

处理cookies,session请求

requests提供了一个叫session类,来实现客户端和服务端的会话保持

使用方法:

1.实例化一个session对象

2.让session发送get或者post请求

session = requests.session()

cookies = {cookies字典}

response = session.get(url,headers=headers,cookies=cookies)

Python爬虫(requests模块)的更多相关文章

  1. python 爬虫 requests模块 目录

    requests模块(response常用属性) 基于requests模块的get请求 基于requests模块发起ajax的get请求 基于requests模块发起ajax的post请求

  2. python爬虫requests模块

    requests库的七个主要方法 1. requests.requests(method, url, **kwargs) 构造一个请求,支撑以下各方法的基础方法 method:请求方式,对应get/p ...

  3. python 爬虫 requests模块(response常用属性)

    response常用属性 content获取的response对象中的二进制(byte)类型的页面数据response.content 返回响应状态码response.status_code 200 ...

  4. Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗

    介绍   本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容.   为了知道POST方法所需要传 ...

  5. Python爬虫—requests库get和post方法使用

    目录 Python爬虫-requests库get和post方法使用 1. 安装requests库 2.requests.get()方法使用 3.requests.post()方法使用-构造formda ...

  6. python爬虫 urllib模块url编码处理

    案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦'的页面数据) import urllib.request # 1.指定url url = 'https://www.sogou. ...

  7. python 爬虫 urllib模块 目录

    python 爬虫 urllib模块介绍 python 爬虫 urllib模块 url编码处理 python 爬虫 urllib模块 反爬虫机制UA python 爬虫 urllib模块 发起post ...

  8. Python之requests模块-hook

    requests提供了hook机制,让我们能够在请求得到响应之后去做一些自定义的操作,比如打印某些信息.修改响应内容等.具体用法见下面的例子: import requests # 钩子函数1 def ...

  9. Python之requests模块-cookie

    cookie并不陌生,与session一样,能够让http请求前后保持状态.与session不同之处,在于cookie数据仅保存于客户端.requests也提供了相应到方法去处理cookie. 在py ...

  10. Python之requests模块-session

    http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制.requests也提供了相应的方法去操纵它们. requests中的session对象能够让我们跨http请求 ...

随机推荐

  1. <计算机系统结构中的8个伟大思想>

    摘自<计算机组成与设计>戴维帕森 ——面向摩尔定律的设计 ——使用抽象简化设计 ——加速大概率事件 ——通过并行提高性能 ——通过流水线提高性能 ——存储器层次 ——通过冗余提高可靠性

  2. LinqDB 查询数据库

    LinqDB数据库查询数据,还是很方便的. 1. 添加Entity数据实体类 方便之后映射操作 /// <summary> /// 课件 /// </summary> [Dat ...

  3. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

  4. jQuery总结02_jq的dom操作+属性操作

    一:JQuery知识点 *:JQuery的dom操作 *:获取节点.给节点添加内容 *:动态创建dom节点 比如动态创建表格等,在js里面进行完成. *删除节点 这里面的删除就是将其放在了一个地方,并 ...

  5. vuejs中拖动改变元素宽度实现宽度自适应大小

    需求效果: 原理:拖动效果的实现基本都是dom操作来实现的,通过拖动分隔线,计算分隔线与浏览器边框的距离(left),来实现拖动之后的不同宽度的计算:当拖动分隔线1时,计算元素框left和mid:当拖 ...

  6. 搭建ES集群

    服务版本选择 TEG的ctsdb当前最高版本采用的是es的6.4.3版本,为了日后与ctsdb衔接方便,部署开源版es时也采用该版本.6.4.3版本的es依赖的jdk版本要求在8u181以上,测试环境 ...

  7. yml和properties的加载顺序和区别

    正常的情况是先加载yml,接下来加载properties文件.如果相同的配置存在于两个文件中.最后会使用properties中的配置.最后读取的优先集最高. 两个配置文件中的端口号不一样会读取prop ...

  8. FTP安装及配置

    在centos7安装ftp服务 yum install -y vsftpd 启动服务 systemctl start vsftpd 自启动 systemctl enable vsftpd 查看端口 注 ...

  9. 字典树(Trie)详解

    详解字典树(Trie) 本篇随笔简单讲解一下信息学奥林匹克竞赛中的较为常用的数据结构--字典树.字典树也叫Trie树.前缀树.顾名思义,它是一种针对字符串进行维护的数据结构.并且,它的用途超级广泛.建 ...

  10. C语言程序设计100例之(18):火柴棒等式

    例18   火柴棒等式 用n根火柴棍,可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棒拼出的整数(若该数非零,则最高位不能是0).用火柴棒拼数字0~9的拼法如图1所示. 图1  用 ...