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中的Matplotlib模块入门教程
Apr 15 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
使用python实现tcp自动重连
Jul 02 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
django框架ModelForm组件用法详解
Dec 11 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
聊聊python中的异常嵌套
Sep 01 Python
深度学习详解之初试机器学习
Apr 14 Python
Python sklearn分类决策树方法详解
Sep 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
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
arguments对象
2006/11/20 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
python实现简易云音乐播放器
2018/01/04 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
python中操作文件的模块的方法总结
2021/02/04 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
简述数组与指针的区别
2014/01/02 面试题
杭州联环马网络笔试题面试题
2013/08/04 面试题
培训专员岗位职责
2014/02/26 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
2014离婚协议书范文
2014/09/10 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python
DQL数据查询语句使用示例
2022/12/24 MySQL