当前位置:首页 > 资讯 > 正文

Python爬虫模块使用方法

Python爬虫模块使用方法

Requests模块是在Python内置模块的基础上进行了高度的封装,主要用来发送HTTP网络请求,可以轻而易举的完成浏览器的任何操作。 Requests模块比urllib2模块更简洁。

  1. 可以直接使用python pip进行安装

    
    
  2. 导入模块

    
    
  3. 定制请求头headers

    
    
  4. 发送请求

    
    
  5. 传递URL参数

    httpbin.org/get?key=val。

    
    

    通过打印输出该 URL,你能看到 URL 已被正确编码:

    
    
  6. 响应内容

    Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。

    
    

    你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它:

    
    
  7. JSON响应内容

    Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:

    
    

    如果 JSON 解码失败, r.json() 就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问 r.json() 将会抛出 ValueError: No JSON object could be decoded 异常。

  8. 复杂的POST请求

    发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:

    
    
  9. 响应状态码

    我们可以通过r.status_code检测响应状态码:

    
    
  10. 响应头

    
    
  11. Cookie

    如果某个响应中包含一些 cookie,你可以快速访问它们:

    
    

    发送得到的cookie到服务器,可以使用参数:

    
    

    Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

    
    
  12. 会话对象

    会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie,所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。
    会话对象具有主要的 Requests API 的所有方法。
    跨请求保持一些 cookie:

    
    
  13. 请求与响应对象

    任何时候进行了类似的调用,你都在做两件主要的事情。其一,你在构建一个对象, 该对象将被发送到某个服务器请求或查询一些资源。 其二,一旦得到一个从服务器返回的响应就会产生一个Response对象。该响应对象包含服务器返回的所有信息,也包含你原来创建的Request对象。
    如果想访问服务器返回给我们的响应头部信息,可以这样做:

    
    

    如果想得到发送到服务器的请求的头部,我们可以简单地访问该请求,然后是该请求的头部:

    
    

urllib 库用于操作网页 URL,并对网页的内容进行抓取处理。

urllib 包 包含以下几个模块:

  • urllib.request - 打开和读取 URL。
  • urllib.error - 包含 urllib.request 抛出的异常。
  • urllib.parse - 解析 URL。
  • urllib.robotparser - 解析 robots.txt 文件。
  1. 打开一个 URL

    urlopen ,然后使用 read() 函数获取网页的 HTML 实体代码。

    
    
  2. 读取网页内容

    除了 read() 函数外,还包含以下两个读取网页内容的函数:

    
    
  3. 判断网页正常访问

    
    
  4. 抓取的网页保持到本地

    
    
  5. URL 的编码与解码

    
    
  6. 模拟头部信息

    
    
  7. 异常

    urllib.error 模块为 urllib.request 所引发的异常定义了异常类,基础异常类是 URLError。

    urllib.error 包含了两个方法,URLError 和 HTTPError。

    URLError 是 OSError 的一个子类,用于处理程序在遇到问题时会引发此异常(或其派生的异常),包含的属性 reason 为引发异常的原因。

    HTTPError 是 URLError 的一个子类,用于处理特殊 HTTP 错误例如作为认证请求的时候,包含的属性 code 为 HTTP 的状态码, reason 为引发异常的原因,headers 为导致 HTTPError 的特定 HTTP 请求的 HTTP 响应头。

    
    
  8. 解析

    urllib.parse 用于解析 URL

    
    

    urllib.robotparser 用于解析 robots.txt 文件。

    robots.txt(统一小写)是一种存放于网站根目录下的 robots 协议,它通常用于告诉搜索引擎对网站的抓取规则。

    urllib.robotparser 提供了 RobotFileParser 类,这个类提供了一些可以读取、解析 robots.txt 文件的方法。

    
    

python里面共有进程、线程、协程三个层次概念,爬虫就是选择:单线程爬取,单线程+协程爬取,多线程爬取,多线程 + 协程爬取,多进程爬取,多进程 + 协程爬取6种组合方案。

存在依赖关系的协程之间是不能够被并发执行的,不存在依赖关系的协程之间是能够被并发执行的。

由于GIL锁的存在,使得线程没法并行执行,只能并发执行。而在并发的情况下,协程的创建、切换开销远远小于线程。所以使用协程而不是使用线程在Python里面是更优的解决方案。

最高效的爬取方案?答案是: 多进程 + 协程。

协程的方案肯定要比多线程快,因为协程的切换开销非常之小。而且协程的并发度可以非常高。我们一般开线程也就几十个线程,协程的并发度可以达到999个。但协程的缺点就是没法并行运行。

最新文章