python爬虫---requests库的用法详解


Posted in Python onSeptember 28, 2020

requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多

因为是第三方库,所以使用前需要cmd安装

pip install requests

安装完成后import一下,正常则说明可以开始使用了。

基本用法:

requests.get()用于请求目标网站,类型是一个HTTPresponse类型

import requestsresponse = requests.get('http://www.baidu.com')
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印头信息
print(response.cookies) # 打印cookie信息
print(response.text) #以文本形式打印网页源码
print(response.content) #以字节流形式打印

运行结果:

状态码:200

url:www.baidu.com

headers信息

python爬虫---requests库的用法详解

各种请求方式:

import requests

requests.get('http://httpbin.org/get')
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')

基本的get请求

import requests

response = requests.get('http://httpbin.org/get')
print(response.text)

结果

python爬虫---requests库的用法详解

带参数的GET请求:

第一种直接将参数放在url内

import requests

response = requests.get(http://httpbin.org/get?name=gemey&age=22)
print(response.text)

结果

python爬虫---requests库的用法详解

另一种先将参数填写在dict中,发起请求时params参数指定为dict

import requests

data = {
  'name': 'tom',
  'age': 20
}

response = requests.get('http://httpbin.org/get', params=data)
print(response.text)

结果同上

解析json

import requests

response = requests.get('http://httpbin.org/get')
print(response.text)
print(response.json()) #response.json()方法同json.loads(response.text)
print(type(response.json()))

结果

python爬虫---requests库的用法详解

简单保存一个二进制文件

二进制内容为response.content

import requests

response = requests.get('http://img.ivsky.com/img/tupian/pre/201708/30/kekeersitao-002.jpg')
b = response.content
with open('F://fengjing.jpg','wb') as f:
  f.write(b)

为你的请求添加头信息

import requests
heads = {}
heads['User-Agent'] = 'Mozilla/5.0 ' \
             '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \
             '(KHTML, like Gecko) Version/5.1 Safari/534.50'
 response = requests.get('http://www.baidu.com',headers=headers)

使用代理

同添加headers方法,代理参数也要是一个dict

这里使用requests库爬取了IP代理网站的IP与端口和类型

因为是免费的,使用的代理地址很快就失效了。

import requests
import re

def get_html(url):
  proxy = {
    'http': '120.25.253.234:812',
    'https' '163.125.222.244:8123'
  }
  heads = {}
  heads['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
  req = requests.get(url, headers=heads,proxies=proxy)
  html = req.text
  return html

def get_ipport(html):
  regex = r'<td data-title="IP">(.+)</td>'
  iplist = re.findall(regex, html)
  regex2 = '<td data-title="PORT">(.+)</td>'
  portlist = re.findall(regex2, html)
  regex3 = r'<td data-title="类型">(.+)</td>'
  typelist = re.findall(regex3, html)
  sumray = []
  for i in iplist:
    for p in portlist:
      for t in typelist:
        pass
      pass
    a = t+','+i + ':' + p
    sumray.append(a)
  print('高匿代理')
  print(sumray)


if __name__ == '__main__':
  url = 'http://www.kuaidaili.com/free/'
  get_ipport(get_html(url))

结果:

python爬虫---requests库的用法详解

基本POST请求:

import requests

data = {'name':'tom','age':'22'}

response = requests.post('http://httpbin.org/post', data=data)

python爬虫---requests库的用法详解

获取cookie

#获取cookie
import requests

response = requests.get('http://www.baidu.com')
print(response.cookies)
print(type(response.cookies))
for k,v in response.cookies.items():
  print(k+':'+v)

结果:

python爬虫---requests库的用法详解

会话维持

import requests

session = requests.Session()
session.get('http://httpbin.org/cookies/set/number/12345')
response = session.get('http://httpbin.org/cookies')
print(response.text)

结果:

python爬虫---requests库的用法详解

证书验证设置

import requests
from requests.packages import urllib3

urllib3.disable_warnings() #从urllib3中消除警告
response = requests.get('https://www.12306.cn',verify=False) #证书验证设为FALSE
print(response.status_code)打印结果:200

超时异常捕获

import requests
from requests.exceptions import ReadTimeout

try:
  res = requests.get('http://httpbin.org', timeout=0.1)
  print(res.status_code)
except ReadTimeout:
  print(timeout)

异常处理

在你不确定会发生什么错误时,尽量使用try...except来捕获异常

所有的requests exception:

Exceptions

import requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException

try:
  response = requests.get('http://www.baidu.com',timeout=0.5)
  print(response.status_code)
except ReadTimeout:
  print('timeout')
except HTTPError:
  print('httperror')
except RequestException:
  print('reqerror')

25行代码带你爬取4399小游戏数据

import requests
import parsel
import csv
f = open('4399游戏.csv', mode='a', encoding='utf-8-sig', newline='')

csv_writer = csv.DictWriter(f, fieldnames=['游戏地址', '游戏名字'])
csv_writer.writeheader()
for page in range(1, 106):
  url = 'http://www.4399.com/flash_fl/5_{}.htm'.format(page)
  headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
  }
  response = requests.get(url=url, headers=headers)
  response.encoding = response.apparent_encoding
  selector = parsel.Selector(response.text)
  lis = selector.css('#classic li')
  for li in lis:
    dit ={}
    data_url = li.css('a::attr(href)').get()
    new_url = 'http://www.4399.com' + data_url.replace('http://', '/')
    dit['游戏地址'] = new_url
    title = li.css('img::attr(alt)').get()
    dit['游戏名字'] = title
    print(new_url, title)
    csv_writer.writerow(dit)
f.close()

到此这篇关于python爬虫---requests库的用法详解的文章就介绍到这了,更多相关python requests库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
Python中的条件判断语句与循环语句用法小结
Mar 21 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
python正则表达式re之compile函数解析
Oct 25 Python
Python File readlines() 使用方法
Mar 19 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
python os模块简单应用示例
May 23 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
python删除文件、清空目录的实现方法
Sep 23 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 24 Python
如何在scrapy中捕获并处理各种异常
Sep 28 #Python
python向企业微信发送文字和图片消息的示例
Sep 28 #Python
python利用tkinter实现图片格式转换的示例
Sep 28 #Python
python在CMD界面读取excel所有数据的示例
Sep 28 #Python
python调用摄像头的示例代码
Sep 28 #Python
python 调用API接口 获取和解析 Json数据
Sep 28 #Python
记录一下scrapy中settings的一些配置小结
Sep 28 #Python
You might like
php 缓存函数代码
2008/08/27 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python实现的栈(Stack)
2018/01/26 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
python+mysql实现教务管理系统
2019/02/20 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
中间件分为哪几类
2012/03/14 面试题
应届生骨科医生求职信
2013/10/31 职场文书
入党申请人的自我鉴定
2013/12/01 职场文书
高中军训感言200字
2014/02/23 职场文书
2014年教研室工作总结
2014/12/06 职场文书
PHP 时间处理类Carbon
2022/05/20 PHP