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实现的最近最少使用算法
Jul 10 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
python抓取文件夹的所有文件
Feb 27 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
python 列表降维的实例讲解
Jun 28 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
python实现多线程端口扫描
Aug 31 Python
Python的pygame安装教程详解
Feb 10 Python
python代码能做成软件吗
Jul 24 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
Python os库常用操作代码汇总
Nov 03 Python
python playwright之元素定位示例详解
Jul 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
PHP实现图片简单上传
2006/10/09 PHP
PHP编写简单的App接口
2016/08/28 PHP
php并发加锁示例
2016/10/17 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
python动态加载包的方法小结
2016/04/18 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
详解python Todo清单实战
2018/11/01 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
struct与class的区别
2014/02/03 面试题
旅游与酒店管理专业求职信
2014/07/21 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
店铺转让协议书
2014/12/02 职场文书
综合测评自我评价
2015/03/06 职场文书
心灵捕手观后感
2015/06/02 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis