Requests模块是在Python内置模块的基础上进行了高度的封装,主要用来发送HTTP网络请求,可以轻而易举的完成浏览器的任何操作。 Requests模块比urllib2模块更简洁。
可以直接使用python pip进行安装
导入模块
定制请求头headers
发送请求
传递URL参数
httpbin.org/get?key=val。
通过打印输出该 URL,你能看到 URL 已被正确编码:
响应内容
Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。
你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它:
JSON响应内容
Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:
如果 JSON 解码失败, r.json() 就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问 r.json() 将会抛出 ValueError: No JSON object could be decoded 异常。
复杂的POST请求
发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:
响应状态码
我们可以通过r.status_code检测响应状态码:
响应头
Cookie
如果某个响应中包含一些 cookie,你可以快速访问它们:
发送得到的cookie到服务器,可以使用参数:
Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:
会话对象
会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie,所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。
会话对象具有主要的 Requests API 的所有方法。
跨请求保持一些 cookie:
请求与响应对象
任何时候进行了类似的调用,你都在做两件主要的事情。其一,你在构建一个对象, 该对象将被发送到某个服务器请求或查询一些资源。 其二,一旦得到一个从服务器返回的响应就会产生一个Response对象。该响应对象包含服务器返回的所有信息,也包含你原来创建的Request对象。
如果想访问服务器返回给我们的响应头部信息,可以这样做:
如果想得到发送到服务器的请求的头部,我们可以简单地访问该请求,然后是该请求的头部:
urllib 库用于操作网页 URL,并对网页的内容进行抓取处理。
urllib 包 包含以下几个模块:
打开一个 URL
urlopen ,然后使用 read() 函数获取网页的 HTML 实体代码。
读取网页内容
除了 read() 函数外,还包含以下两个读取网页内容的函数:
判断网页正常访问
抓取的网页保持到本地
URL 的编码与解码
模拟头部信息
异常
urllib.error 模块为 urllib.request 所引发的异常定义了异常类,基础异常类是 URLError。
urllib.error 包含了两个方法,URLError 和 HTTPError。
URLError 是 OSError 的一个子类,用于处理程序在遇到问题时会引发此异常(或其派生的异常),包含的属性 reason 为引发异常的原因。
HTTPError 是 URLError 的一个子类,用于处理特殊 HTTP 错误例如作为认证请求的时候,包含的属性 code 为 HTTP 的状态码, reason 为引发异常的原因,headers 为导致 HTTPError 的特定 HTTP 请求的 HTTP 响应头。
解析
urllib.parse 用于解析 URL
urllib.robotparser 用于解析 robots.txt 文件。
robots.txt(统一小写)是一种存放于网站根目录下的 robots 协议,它通常用于告诉搜索引擎对网站的抓取规则。
urllib.robotparser 提供了 RobotFileParser 类,这个类提供了一些可以读取、解析 robots.txt 文件的方法。
python里面共有进程、线程、协程三个层次概念,爬虫就是选择:单线程爬取,单线程+协程爬取,多线程爬取,多线程 + 协程爬取,多进程爬取,多进程 + 协程爬取6种组合方案。
存在依赖关系的协程之间是不能够被并发执行的,不存在依赖关系的协程之间是能够被并发执行的。
由于GIL锁的存在,使得线程没法并行执行,只能并发执行。而在并发的情况下,协程的创建、切换开销远远小于线程。所以使用协程而不是使用线程在Python里面是更优的解决方案。
最高效的爬取方案?答案是: 多进程 + 协程。
协程的方案肯定要比多线程快,因为协程的切换开销非常之小。而且协程的并发度可以非常高。我们一般开线程也就几十个线程,协程的并发度可以达到999个。但协程的缺点就是没法并行运行。
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.bhha.com.cn/news/4742.html