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 调用VC++的动态链接库(DLL)
Sep 06 Python
Python异常处理总结
Aug 15 Python
Python爬取Coursera课程资源的详细过程
Nov 04 Python
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
用Python创建声明性迷你语言的教程
Apr 13 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
numpy排序与集合运算用法示例
Dec 15 Python
用Python3创建httpServer的简单方法
Jun 04 Python
python网络应用开发知识点浅析
May 28 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
python基础之文件处理知识总结
May 23 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
PHP SEO优化之URL优化方法
2011/04/21 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
如何基于python生成list的所有的子集
2019/11/11 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
python db类用法说明
2020/07/07 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
师范生自荐信范文
2013/10/06 职场文书
效能监察建议书
2014/05/19 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL