`
uule
  • 浏览: 6351681 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

【爬虫解析4】:requests总结

 
阅读更多

https://www.cnblogs.com/whatbeg/p/5320666.html

 

会话对象requests.Session能够跨请求地保持某些参数,比如cookies,即在同一个Session实例发出的所有请求都保持同一个cookies,而requests模块每次会自动处理cookies,这样就很方便地处理登录时的cookies问题。在cookies的处理上会话对象一句话可以顶过好几句urllib模块下的操作。即相当于urllib中的:

cj = http.cookiejar.CookieJar()

pro = urllib.request.HTTPCookieProcessor(cj)

opener = urllib.request.build_opener(pro)

urllib.request.install_opener(opener)

 

1:保持请求之间的Cookies,我们可以这样做。

import requests

session = requests.Session()

session.get(login_url) # 可以保持登录态

 

2:请求时,会加上headers,一般我们会写成这样

 

session.get(url, params, headers=headers)

唯一不便的是之后的代码每次都需要这么写,代码显得臃肿,所以我们可以这样:

#在构造函数中,这样设置是全局的。

# 设置请求头

s = requests.Session()

s.headers = {'balabala'}

# 移除服务器验证

s.verify = False

# 设置代理

s.proxies={'aa'}

 

3:默认requests请求失败后不会重试,但是我们跑case时难免遇到一些网络或外部原因导致case失败,我们可以在Session实例上附加HTTPAdapaters 参数,增加失败重试次数。

 

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)

session.mount('https://',request_retry)  

session.mount('http://',request_retry)

这样,之后的请求,若失败,重试3次。

 

4:重定向 

网络请求中可能会遇到重定向,我们需要一次处理一个请求,可以把重定向禁止。

session.post(url,data,allow_redirects=False)

 

5: post请求提交json格式数据时(请求头为:{“Content-Type”: “application/json”}),一般先要把python对象转换成json对象。可能很多时候是这样写:

session.post(url, data=json.dumps(data))。

其实post有一个默认参数json,可以直接简写成:

 session.post(url, json=data)

 

 

6:写接口请求,debug时,会需要看下代码请求的详细信息,当然我们可以使用fiddler来查看,其实我们自己也可以在代码这样获取debug信息*

 

import requests

import logging

import httplib as http_client

 

http_client.HTTPConnection.debuglevel = 1

 

logging.basicConfig()

logging.getLogger().setLevel(logging.DEBUG)

requests_log = logging.getLogger("requests.packages.urllib3")

requests_log.setLevel(logging.DEBUG)

requests_log.propagate = True

 

requests.get('https://www.baidu.com')

 

#更好的方法是自己封装一个装饰器,就可以为任意请求函数添加一个debug功能。

 

7:使用grequests实现异步请求。

pip install grequests

import grequests

 

urls = [

    'http://www.url1.com',

    'http://www.url2.com',

    'http://www.url3.com',

    'http://www.url4.com',

    'http://www.url5.com',

    'http://www.url6.com',

]

 

resp = (grequests.get(u) for u in urls)

grequests.map(resp)

 

# [<Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>]

 

8:发送自定义cookies 

我们使用Session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies 

我们可以这样

 

# 自定义cookies

cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}

session.post('http://wikipedia.org', cookies=cookie) 

 

 

9:需求确定前后端并行设计时,这时测试并没有办法调用接口,如何做接口测试呢?我们可以使用mock或者是httpretty

 

import requests

import httpretty

 

# 模拟返还的状态码

@httpretty.activate

def test_beta1_access():

    httpretty.register_uri(httpretty.GET, "http://beta.com/",

                           body="here is the mocked body",

                           status=201)

 

    response = requests.get('http://beta.com')

    expect(response.status_code).to.equal(201)

 

# 模拟返还response的body

@httpretty.activate

def test_some_api():

    httpretty.register_uri(httpretty.GET, "http://beta.com/",

                           body='{"success": false}',

                           content_type='text/json')

 

    response = requests.get('http://beta.com/')

 

    expect(response.json()).to.equal({'success': False})

 

详细使用可以查看API_DOC

 

 

10:统计一个API请求花费的时间,我们可以使用如下方法

session.get(url).elapsed 

 

11:设置请求超时

session.get(url, timeout=15)

# timeout 仅对连接过程有效,与响应体的下载无关。 

# timeout 并不是整个下载响应的时间限制,而是如果服务器在15 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)

 

关于Python ,requests的小技巧,就是这些。

 

分享到:
评论

相关推荐

    探秘Python爬虫的核心:requests库的威力与应用

    5. **错误处理**:处理网络请求错误、解析错误等,并确保爬虫的稳定运行。 6. **用户代理(User-Agent)**:模拟浏览器访问,避免被网站识别为爬虫。 7. **爬取策略**:遵守 `robots.txt` 文件的规则,合理设置爬取...

    跟着崔庆才学爬虫2:requests库的使用

    崔庆才老师的“跟着崔庆才学爬虫2:requests库的使用”教程主要涵盖了Python爬虫中必不可少的requests库的使用方法。requests库是Python中最常用的HTTP客户端库,用于发送HTTP请求,非常适合进行网页抓取。在这个...

    解析Python网络爬虫:核心技术、Scrapy框架、分布式爬虫全套教学资料

    本套教学资料深入解析了Python爬虫的核心技术、Scrapy框架以及分布式爬虫的实现,旨在帮助学习者掌握这一领域的核心技能。 一、Python爬虫核心技术 Python语言因其简洁明了的语法和丰富的第三方库而成为网络爬虫...

    python爬虫基础教程:requests库(二)代码实例

    ### Python爬虫基础教程:requests库(二)代码实例 #### 概述 本文将详细介绍Python爬虫技术中关于`requests`库的应用,包括GET请求、POST请求、使用代理以及session登录等内容。`requests`是Python中最常用的...

    Python爬虫作业报告:怎么利用Python写益智类游戏.docx

    3. **编写爬虫程序**:使用Python的Requests库发送HTTP请求获取网页源码,再借助BeautifulSoup库解析HTML,提取商品信息。爬虫流程大致为: - 发送请求:Requests库用于发送GET请求,获取网页HTML内容。 - 解析...

    Python爬虫入门教程:超级简单的Python爬虫教程.pdf

    ### Python爬虫入门教程知识点详解 #### 一、理解网页结构 在进行Python爬虫开发之前,首先要了解网页的基本构成。网页通常包含三个主要部分:HTML(超文本标记语言)、CSS(层叠样式表)以及JavaScript(一种常用...

    Python爬虫入门教程:超级简单的Python爬虫教程.zip

    接着,会讲解如何安装和使用常见的Python爬虫库,比如requests库用于发送HTTP请求,BeautifulSoup库用于解析HTML文档。 在HTTP协议部分,你将学习GET和POST两种基本请求方法,了解HTTP头、Cookie和Session的用法,...

    java爬虫登录验证码解析.zip

    解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到...

    Python爬虫案例2:爬取前程无忧网站数据

    在提供的“爬虫案例2资源”压缩包中,包含了完整的爬虫程序和解析程序,你可以根据这些代码进行学习和研究。通过实际运行这些代码,你可以更深入地理解网络爬虫的工作流程,以及如何在Python中处理和存储爬取的数据...

    Python爬虫入门教程:超级简单的Python爬虫教程

    总结来说,Python爬虫入门主要涉及以下几个方面: 1. 理解网页结构:HTML、CSS和JavaScript的作用。 2. 使用requests库抓取网页数据:发送HTTP请求并接收响应。 3. 使用Beautiful Soup解析HTML:查找和提取所需信息...

    京东商品和评论爬虫requests(代码可用)

    4. JSON数据处理:京东的API可能返回JSON格式的数据,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python的json模块可以帮助我们进行JSON数据的...

    python爬虫实例 requests+beautifulsoup4解析 HTML 页面一个简单的网页上抓取标题和链接

    python爬虫实例 requests+beautifulsoup4解析 HTML 页面一个简单的网页上抓取标题和链接 Python 爬虫是一种自动化程序,用于从网站上抓取数据。这里我将提供一个简单的 Python 爬虫实例,使用 requests 库来发送 ...

    爬虫示例程序:网络小爬虫-采用python-能完成基本的爬虫任务

    Python中最常用的爬虫库有BeautifulSoup、Requests和Scrapy。Requests库负责发送HTTP请求,获取网页的HTML内容;BeautifulSoup则用于解析这些HTML文档,找出我们感兴趣的数据;Scrapy是一个更全面的框架,包含了爬虫...

    爬虫教程总结+考试总结2023上学器

    在这个“爬虫教程总结+考试总结2023上学器”中,我们将深入探讨爬虫的基本原理、常用技术以及在教育和考试中的应用。 一、爬虫基础 1. 爬虫的定义:网络爬虫(Web Crawler)又称为蜘蛛或机器人,通过模拟人类...

    Python网络爬虫与信息提取 嵩天-Requests库入门01

    ### Python网络爬虫与信息提取 —— Requests库入门 #### 一、引言 随着互联网技术的迅猛发展,网络上产生了海量的信息资源。对于开发者来说,如何高效地抓取这些资源变得尤为重要。Python作为一种功能强大且易用的...

    python爬虫框架代码:提供一些通用的爬虫功能和模块,方便开发者快速构建自己的爬虫程序.txt

    通过给定的文件信息,我们可以总结出以下关于Python爬虫框架的关键知识点: ### Python爬虫框架概述 Python因其丰富的库支持以及简洁易读的语法特性,成为开发爬虫程序的首选语言之一。对于爬虫程序而言,其核心...

    python 爬虫项目实战:批量爬取B站小视频 源码

    这个案例将使用到requests库来发送HTTP请求,以及BeautifulSoup库来解析网页内容。 适用人群 Python开发者:希望提高网络爬虫的开发技能。 数据分析师:需要从B站获取视频数据进行分析。 视频内容创作者:可能需要...

    81个Python爬虫源代码+九款开源爬虫工具.doc

    - Python爬虫源代码通常涉及到requests库用于发送HTTP请求,BeautifulSoup或lxml库解析HTML或XML文档,可能还会使用到re正则表达式处理文本,以及如pandas和numpy库进行数据清洗和分析。 2. **Gecco**: - Gecco...

    Python网络爬虫实习报告总结归纳.docx

    4. newspaper框架:专注于新闻和文章的抓取与分析,提供文章内容提取、元信息解析等功能。 5. Python-goose框架:专门用于提取文章的主要内容,包括图片、视频和元信息,适合新闻类网站的数据抓取。 四、数据爬取...

Global site tag (gtag.js) - Google Analytics