1基本用法

import requestsurl = 'https://www.baidu.com/'
r = requests.get(url)
print(type(r))
print(r.status_code)
print(type(r.text))
print(r.text)
print(r.cookies)
"""
调用get()方法,输出response的类型、状态码、响应体的类型、响应内容以及cookies
r.text # 返回响应内容
"""

r.text,网页返回内容是str类型,如要直接解析返回结果,得到一个字典格式的话,可直接调用json()方法。r.json()

1.1添加参数

---snip---
data = {'name': 'germey','age': 22
}
r = requests.get(url, params=data)    # 利用params参数

1.2抓取网页

import requests
import reheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Inter Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
}
r = requests.get("https://www.zhihu.com/explore", headers=headers)
pattern = re.compile('explore-feed.*?question_link.*?>(.*?)</a>', re.S)
title = re.findall(pattern, r.text)
print(title)
"""
输出结果就一个[],问题还未解决
"""

1.3抓取二进制数据,抓取图片

图片、音频、视频这些文件本质上都是由二进制码组成,想要抓取他们,就要拿到他们的二进制码。

import requestsr = requests.get("https://g.alicdn.com/tb/login/0.4.7/weibo/css/images/ico-taobao.png")
# print(r.text)
# print(r.content)
with open('taobao.png', 'wb') as f:f.write(r.content)

GET 请求页面,并返回页面内容
POST 大多用于提交表单或上传文件,数据包含在请求体中

1.4PSOT请求,并写入文件

import requestsdata = {'name': 'germey', 'age': '22'}
r = requests.post('http://httpbin.org/post', data=data)
print(type(r.text))
print(type(r.content))
with open('filename.txt', 'w') as f:f.write(r.text)
with open('filename2.txt', 'wb') as f:f.write(r.content)"""
<class 'str'>
<class 'bytes'>
r.text 返回响应类型为str,r.content返回响应类型为bytes
with open('filename.txt', 'wb') as f:       # 用open()方法,他的第一个参数是文件名称,第二个参数代表以二进制写的形式打开,可以向文件里写入二进制数据。
"""

1.5requests内置的状态码查询对象requests.codes

import requestsr = requests.get('https://www.jianshu.com')
exit() if not r.status_code == requests.codes.ok else print('Request Successfully')

2高级用法

2.1上传文件

import requestsfiles = {'file': open('favicon.ico', 'rb')}     # 这是一个字典,file为键,:后面为值
r = requests.post('http://httpbin.org/post', files=files)   # requests模拟提交数据
print(r.text)

(读取文件)下面的程序打开并读取文件,再将其内容显示到屏幕上:

with open('wenjian.txt') as file: contents = file.read() print(contents)

2.2Cookies

用requests可以轻松处理cookies,这里以news.baidu.com为例

import requestsr = requests.get('http://news.baidu.com')
print(r.cookies)    # 调用cookies属性,便可得到Cookies。运行发现它是一个RequestsCookieJar类型
for key, value in r.cookies.items():    # items()方法将其转换为元组组成的列表,遍历每一个Cookies的名称和值,实现Cookies的遍历解析。print(key + '=' + value)

2.3 用Cookies来维持登录状态

这里测试失败,后期补充

2.3.1 会话维持

Session() 对象,维持一个会话

import requestsrequests.get('http://httpbin.org/cookies/set/number/123456789')
r = requests.get('http://httpbin.org/cookies')
print(r.text)s = requests.Session()      # 创建一个实例
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

2.4 SSL证书验证

通常verify参数默认设置为True,如果证书验证错误导致访问失败,可以把vertify设置为False。但是会产生警告
r = requests.get(url, vertify=False)

设置忽视警告
import urllib3
urllib3.disable_warnings()
或者捕获警告到日志
import logging
logging.captureWarnings(True)

2.5 代理设置

import requestsurl = 'http://...'
proxies = {"http": "http://user:password@host:port"
}
r = requests.get(url, proxies=proxies)

2.6 超时设置

timeout()

import requestsr = requests.get('https://www.baidu.com', timeout=1)
print(r.status_code)
"""
timeout=1  # 这个设置将用作连接和读取的timeout总和
timeout=(5,1)  # 设置一个元组,分别指示连接和读取的时间
如果想要永久等待,可以将timeout的值设置为None,或者不设置直接留空,默认是None
"""

2.7 身份认证

访问网站时,有时会遇到身份认证页面,此时可以使用requests自带的身份认证功能:

import requests
from requests.auth import HTTPBasicAuthr = requests.get('http://localhost:5000', auth=HTTPBasicAuth('username', 'password'))
print(r.status_code)
"""
如果密码和用户名正确,会返回200;如果认证失败,返回401。
"""
"""
出错未解决:[WinError 10061] 由于目标计算机积极拒绝,无法连接。
"""

3 正则表达式,re库,match()方法

开源中国提供的正则表达式测试工具https://tool.oschina.net/regex/
Python的re库提供了整个正则表达式的实现。

3.1 实例

一个常用的匹配方法一match (),向它传人要匹配的字符串以及正表达式即可检测。
在 match ()方法中,第一个参数传入了正则表达式,第二个参数传入了要匹配的字符串

import recontent = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\s\d\d\d\s\d{4}\s\w{10}', content)      #  match ()方法,第一个参数传入了正则表达式,第二个参数传入了要匹配的字符串
print(result)
print(result.group())   # 方法group()可以输出匹配到的内容
print(result.span())    # 方法span()可以输出匹配的范围

3.2 match(),通用匹配.*

match()方法会尝试从字符串的起始位置匹配正则表达式,如果匹配,就返回匹配成功的结果;如果不匹配,就返回None

匹配目标:使用()括号将想要的子字符串括起来

import recontent = 'Hello 1234567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\s(\d+)\s(\w{5})', content)      # 使用()括号将想要提取的子字符串括起来,()标记了一个子表达式的开始和结束位置
print(result)
print(result.group())
print(result.group(1))      # 调用group(1)来获得匹配结果
print(result.group(2))
print(result.span())
"""
40
<re.Match object; span=(0, 19), match='Hello 1234567 World'>
Hello 1234567 World
1234567
World
(0, 19)
"""

3.2.1 非贪婪匹配 .*?

贪婪匹配是尽可能匹配多的字符,非贪婪匹配是尽可能匹配少的字符
字符串中间尽量使用非贪婪匹配,即用.*?来代替.*,以,避免匹配缺少
字符串结尾尽量使用.*,以避免匹配不到结果

3.2.2 修饰符 re.S, re.I

. 匹配的是除换行符之外的任意字符,当遇到换行符时,.*? 就不能匹配了,所以导致匹配失败,这里只需加一个修饰符 re.S ,即可修正。

import recontent = '''Hello 1234567 World_This
is a Regex Demo
'''
print(len(content))
result = re.match('^He.*?(\d+).*?Demo$', content, re.S)      # 使用()括号将想要提取的子字符串括起来,()标记了一个子表达式的开始和结束位置
print(result)
print(result.group(1))
print(result.span())
# .*通用匹配
# .*?非贪婪匹配
# re.S 使.匹配包括换行符在内的所有字符

3.2.3 转义匹配

当遇到用于正则匹配模式的特殊字符时,在前面加反斜线转义一下即可。

3.3 searach()

方法search (),它在匹配时会扫描整个字符串,然后返回第一个成功匹配的结 。即正则表达式可以是字符串的一部分,在匹配时,search ()方法会依次扫描字符串,直到找到第一个符合规则的字符串,然后返回匹配内容,如果搜索完了还没有找到,就返回 None。
**search()**方法只返回匹配正则表达式的第一个内容

import recontent = 'Extra stings Hello 1234567 World_This is a Regex Demo'print(len(content))
result = re.search('Hello.*?(\d+).*?Demo', content)      # 使用()括号将想要提取的子字符串括起来,()标记了一个子表达式的开始和结束位置
# 方法search()
# .*通用匹配
# .*?非贪婪匹配
# 使用search(),不需要再加^和$
print(result)
print(result.group())   # 方法group()可以输出匹配到的内容
print(result.group(1))  # 方法span()可以输出匹配的范围
print(result.span())

3.4 findall()

search()方法可以返回匹配正则表达式的第一个内容,findall()可以获取匹配正则表达式的所有内容。

findall()方法,如果有返回结果,则结果是列表类型,可以遍历列表获取每组内容。

3.5 sub()

修改文本

import recontent = '54gfgfdsg56dsag'
content = re.sub('\d+', '', content)  # 第一个参数\d+来匹配所有的数字,第二个参数为替换成的字符串(去掉参数的话,赋值为空),第三个参数是原字符串
print(content)

3.6 compile()

compile()将正则表达式编译成一个正则表达式对象,以便复用

爬取猫眼电影名称

import requests
import redef get_one_page(url):headers = {'User_Agent': 'Mozilla/5.0 (Macintosh; Inter Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}   # 设置代理服务器response = requests.get(url, headers=headers)if response.status_code == 200:response.encoding = 'utf8'      # 如果不加这条语句,输出爬取的信息为乱码!# 爬取下来的编码是ISO-8859-1格式,需要转化为utf-8格式,加一句response.encoding = “utf8”return response.textreturn Nonedef parse_one_page(html):pattern = re.compile('<head>.*?>(.*?)<', re.S)items = re.findall(pattern, html)print(items)with open('filename.txt', 'w') as f:f.write(str(items))def main():url = 'http://maoyan.com/board/4'html = get_one_page(url)print(html)parse_one_page(html)main()# 在network的response中查看原始请求得到的源码
"""
1、一部电影信息对应的源代码是一个dd节点,排名信息在class为borad-index的i节点内,利用非贪婪模式来提取i节点内的信息,正则表达式:<dd>.*?board-index.*?>(.*?)</i>
2、提取电影的图片,在a节点后,其内部有两个img节点,第二个img节点的data-src属性是图片的链接,提取这个属性,正则表达式:<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)"
3、提取电影的名称,在p节点后,class为name,正则表达式:<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>
4、提取其他内容方法类似
"""

爬取小说《灵武封神》第一章

小点:findall()和search()的区别

import requests
import redef get_one_page(url):headers = {'User_Agent': 'Mozilla/5.0 (Macintosh; Inter Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}   # 设置代理服务器response = requests.get(url, headers=headers)if response.status_code == 200:response.encoding = 'utf8'      # 如果不加这条语句,输出爬取的信息为乱码!# 爬取下来的编码是ISO-8859-1格式,需要转化为utf-8格式,加一句response.encoding = “utf8”return response.textreturn Nonedef parse_one_page(html):pattern = re.compile('<title>(.*?)</title>', re.S)items = re.findall(pattern, html)       # findall()匹配的是正则表达式()里的内容,如果有返回结果的话,就是列表类型。有(),则只返回()里的内容;没有(),则返回正则表达式的内容。# items = re.search(pattern, html)      # search()匹配的是正则表达式的内容print(items)with open('filename.txt', 'w') as f:f.write(str(items))def main():url = 'http://book.zongheng.com/chapter/891033/58356325.html'html = get_one_page(url)print(html)parse_one_page(html)if __name__ == '__main__':# __name__是内置变量,可用于表示当前模块的名字# if __name__=='__main__'下的代码只能被自己直接执行,不能被其他程序import调用执行;main()# 在network的response中查看原始请求得到的源码

参考书籍《Python 3网络开发爬虫实战》

Python爬虫日记2——使用requests相关推荐

  1. python基础代码库-python爬虫基础教程:requests库(二)代码实例

    get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...

  2. python爬虫日记01

    PYTHON爬虫日记01 记录自己的学习爬虫日记 选用python作为编程语言 1.环境准备 python3.6+ mysql pycharm 2.思路 以爬取猫眼top100为目标 ​ 1.分析ur ...

  3. Python爬虫实战之一 - 基于Requests爬取拉勾网招聘信息,并保存至本地csv文件

    Python爬虫实战之二 - 基于Requests抓取拉勾网招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于小白,本 ...

  4. 【Python爬虫系列】使用requests爬取图片

    Python3常用的爬虫第三方插件有requests,urllib.request等.这里主要介绍使用requests抓取网页上的图片,该方法只针对静态网页,不考虑js动态加载的网页. 预备知识: r ...

  5. Python爬虫之BeautifulSoup和requests的使用

    requests,Python HTTP 请求库,相当于 Android 的 Retrofit,它的功能包括 Keep-Alive 和连接池.Cookie 持久化.内容自动解压.HTTP 代理.SSL ...

  6. Python 爬虫---(5)Requests库的使用

    什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库 如果你看过上篇文章关于urllib库的使用,你会发现, ...

  7. python爬虫实践记录-基于requests访问翻译网页爬取结果

    前言 目前主流的翻译网站反爬虫都挺严格的,某度有sign算法,谷歌自带技能冷却.... 查了一下发现一个反爬虫没用那么苛刻的翻译网站:译典通.         第一次听说这个网站,界面挺老,爬来的源代 ...

  8. [ Python ] 爬虫类库学习之 requests,爬取豆瓣喜剧电影排行榜

    requests 文档:http://cn.python-requests.org/zh_CN/latest/ 安装:pip --timeout=100 install requests [ pyth ...

  9. Python爬虫之urllib和requests哪个好用--urllib和requests的区别

    我们讲了requests的用法以及利用requests简单爬取.保存网页的方法,这节课我们主要讲urllib和requests的区别. 1.获取网页数据 第一步,引入模块. 两者引入的模块是不一样的, ...

最新文章

  1. 性能分析:hash索引导致delete慢
  2. 【锋利的Jquery】读书笔记五
  3. ubuntu20.04LTS系统的终端terminal透明化设置
  4. 欢迎使用CSDN-markdown编辑器12213123
  5. 菜鸟教程html图片自动播放,HTML img 标签 | 菜鸟教程
  6. 小学计算机教案 插入艺术字,五年级信息技术《艺术字标题》教学设计
  7. tomcat在linux服务器上部署应用
  8. AltiumDesigner VS 立创EDA —— PCB绘图软件选择
  9. 计算机屏保后无法再次启动,电脑开机一直停留在屏保 电脑问题的原因以及解决方法...
  10. php 微信推送提醒,php实现微信模板消息推送
  11. AngularJs参数传递
  12. golang通过浏览器操作服务器中文件
  13. Linux系统操作命令
  14. 都2020年了,还在迷信啤酒与尿布!数据分析的真相是……
  15. npm ERR! nested aliases not supported 报错原因
  16. 针式个人知识管理系统帮助:实现您的PKM梦想!
  17. @Transactional使用
  18. 如何更改vmware的网络模式
  19. Python笔记之不可不练
  20. 什么是长连接和短连接?

热门文章

  1. 一些程序员都关注的公众号!
  2. 杰里之AI 唤醒SIRI功能篇
  3. 导出Excel并兼容IE8版本
  4. 2021新宁二中高考喜报成绩查询,新宁一中、二中、崀高等校高考喜报!最高分684,全县大获得丰收!...
  5. html标签的多级列表,word如何将标题样式关联多级列表
  6. LeetCode——1217. 玩筹码
  7. #今日论文推荐# 2名全色盲儿童部分恢复视锥细胞功能,新研究首次证明基因治疗可激活休眠视锥细胞通路
  8. Kafka集群搭建及SASL/SCRAM,ACL权限控制
  9. linux ls 目录颜色,改变ls 中目录颜色的方法
  10. 计算机用户登录界面壁纸,怎么修改电脑开机的登陆界面的壁纸