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中的标识运算符
May 14 Python
Python编写一个优美的下载器
Apr 15 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Python中import导入不同目录的模块方法详解
Feb 18 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
python如何调用java类
Jul 05 Python
Python同时处理多个异常的方法
Jul 28 Python
pytorch学习教程之自定义数据集
Nov 10 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 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中养成7个面向对象的好习惯
2010/07/17 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
phpize的深入理解
2013/06/03 PHP
php-fpm配置详解
2014/02/12 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
试用php中oci8扩展
2015/06/18 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
JS正则表达式验证数字代码
2014/01/28 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Python 含参构造函数实例详解
2017/05/25 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python中set()函数简介及实例解析
2018/01/09 Python
Python的条件锁与事件共享详解
2019/09/12 Python
详解Django配置JWT认证方式
2020/05/09 Python
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
婚前财产公证书
2014/04/10 职场文书
建筑投标担保书
2014/05/20 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python