Python爬虫(requests模块)
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模块)的更多相关文章
- python 爬虫 requests模块 目录
requests模块(response常用属性) 基于requests模块的get请求 基于requests模块发起ajax的get请求 基于requests模块发起ajax的post请求
- python爬虫requests模块
requests库的七个主要方法 1. requests.requests(method, url, **kwargs) 构造一个请求,支撑以下各方法的基础方法 method:请求方式,对应get/p ...
- python 爬虫 requests模块(response常用属性)
response常用属性 content获取的response对象中的二进制(byte)类型的页面数据response.content 返回响应状态码response.status_code 200 ...
- Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗
介绍 本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容. 为了知道POST方法所需要传 ...
- Python爬虫—requests库get和post方法使用
目录 Python爬虫-requests库get和post方法使用 1. 安装requests库 2.requests.get()方法使用 3.requests.post()方法使用-构造formda ...
- python爬虫 urllib模块url编码处理
案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦'的页面数据) import urllib.request # 1.指定url url = 'https://www.sogou. ...
- python 爬虫 urllib模块 目录
python 爬虫 urllib模块介绍 python 爬虫 urllib模块 url编码处理 python 爬虫 urllib模块 反爬虫机制UA python 爬虫 urllib模块 发起post ...
- Python之requests模块-hook
requests提供了hook机制,让我们能够在请求得到响应之后去做一些自定义的操作,比如打印某些信息.修改响应内容等.具体用法见下面的例子: import requests # 钩子函数1 def ...
- Python之requests模块-cookie
cookie并不陌生,与session一样,能够让http请求前后保持状态.与session不同之处,在于cookie数据仅保存于客户端.requests也提供了相应到方法去处理cookie. 在py ...
- Python之requests模块-session
http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制.requests也提供了相应的方法去操纵它们. requests中的session对象能够让我们跨http请求 ...
随机推荐
- 【zabbix服务】修改zabbix_server默认端口号
1. zabbix-server的默认端口号是10051.如果存在端口号冲突,需要更改端口号. 2. 更改配置文件 # 监听端口这行默认被注释的(将下面的端口改为自己定义的) [root@tanbao ...
- 解决Entity 实体类中加了@Id 注解后仍然出现org.hibernate.AnnotationException: No identifier specified for entity 错误
启动报错如下图所示: 解决方案: 查看网上的资料,大部分都说在实体类中没有添加加主键的注解@Id,这个是必须的.但是我的实体类中明明已经添加了@Id,为什么还会报这个错误呢? 后来检查了很久,发现是我 ...
- Java8新特性之接口defualt,static方法
简介 作用 Java8中接口引入了defualt,static两种方法提供默认实现,彻底打破了接口不能有默认实现的规定 static 让接口类似于工具类,提供一些静态方法 static方法不会被子类继 ...
- Android OkHttp + Retrofit 断点续传
本文链接 前面我们已经知道如何使用OkHttp+Retrofit下载文件. 下载文件时,可能会遇到一些意外情况,比如网络错误或是用户暂停了下载. 再次启动下载,如果又要从头开始,会白白浪费前面下载好的 ...
- Prometheus学习系列(三)之Prometheus 概念:数据模型、metric类型、任务、实例
前言 本文来自Prometheus官网手册1.Prometheus官网手册2 和 Prometheus简介 说明 Prometheus从根本上存储的所有数据都是时间序列: 具有时间戳的数据流只属于单个 ...
- js-05-对象(object)
一.访问对象属性的两种方法 a:objectName.PropertyName 对象名.属性名 b:objectName["PropertyName"] 对象名[“ ...
- 超实用的JS数组去重
一.简单的去重方法,利用数组indexOf方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- CentOS 安装Asp.net Core & FTP服务
网络设置 确认是否成功连网: ping baidu.com 如果无法上网请检查以下设置 ip link show vim /etc/sysconfig/network-scripts/ipcfg-(看 ...
- (草稿)如何判断一名UiPath开发人员是否合格?
一名合格的UiPath开发人员究竟需要具备什么核心技能?业务梳理?沟通技巧?VB.net吗?VBA吗?Python?还是SQL?出于多种原因,关于这一点总是众说纷纭,莫衷一是.尽管这些技术都算沾边,但 ...
- 字符串 string方法
字符串 name = 'ab c dd' i = name.find('a', 1, 3) # 找到返回对应下标 找不到返回-1 print(i) j = name.rfind('d') # 寻找对应 ...