python 爬虫之一 "Requests 库学习"

这个系列的文章是用来记录我学习 python 爬虫的。这是第一篇。

安装 requests 库

1
sudo pip install requests

验证安装是否成功

1
2
3
4
5
6
7
$ python
>>> #import requests
>>> r = requests.get("http://www.baidu.com")
>>> r.status_code
200
>>>r.encoding = 'utf-8'
>>>r.text

Requests 库的主要方法

  • requests.request()

    构造一个请求,支撑一下各方法的基础方法

  • requests.get()

    获取HTML网页的主要方法,对应HTTP的GET

  • requests.head()

    获取HTML网页头信息的方法,对应HTTP的HEAD

  • requests.post()

    向HTML网页提交POST请求的方法,对应HTTP的POST

  • requests.put()

    向HTML网页提交PUT请求的方法,对应HTTP的PUT

  • requests.patch()

    向HTML网页提交局部修改请求,对应HTTP的POST

  • requests.delete()

    向HTML网页提交删除请求,对应HTTP的POST

Reuqest 最重要的两个对象

Request 对象

Response 对象

包含了爬虫返回的全部内容

  • r.status_code; 状态码,200表示成功,404表示失败
  • r.text; HTTP响应内容的字符串形式,即, URL 对应的页面内容
  • r.encoding; 从 HTTP header 中猜测的响应内容编码方式

    如果 header 中不存在 charset, 则认为编码是,ISO-8859-1

  • r.apparent_encoding;从内容中分析出的响应内容编码方式(备选编码方式)
  • r.content; HTTP 响应内容的二进制形式

爬取网页的通用代码框架

Request 的异常

  • request.ConnectionError; 网络连接错误异常,如DNS查询失败,拒绝连接定
  • request.HTTPError; HTTP错误异常
  • request.URLRequired; URL 缺失异常
  • request.TooManyRedirects; 超过最大重定向次数,长生重定向异常
  • request.ConnectTimeout;链接远程服务器超时异常
  • requests.Timeout;请求URL超时,产生超时异常

r.raise_for_status(); 如果不是200,产生已成requests.HTTPError

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -- coding: UTF-8 --
import requests
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
# 如果状态不是200, 引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ == '__main__':
url = "http://CepheusSun.com"
print(getHTMLText(url))
通用代码框架

HTTP 协议

HTTP, Hypertext Transfer Protocol, 超文本传输协议。

HTTP 是一个基于”请求与响应”模式的、无状态的应用层协议。

HTTP 协议采用 URL 作为定位网络资源的标识。

URL格式: http://host[:port][path]

  • host:合法的 Internet 主机域名或者 IP 地址
  • port:端口号,缺省端口为80
  • path:请求资源的路径

URL 是通过 HTTP 协议存取资源的 Internet 路径, 一个 URL 对应一个数据资源。

HTTP 协议对资源的操作

GET, 获取资源
HEAD,获取资源头部信息
POST,向URL位置的资源后附加新的数据
PUT,储存一个资源,覆盖原来URL的资源
PATCH,对原来的资源,进行局部更新
DELETE,删除

requests.request(method, url, **kwargs)

method: 请求方式,对应get/put/post等7种
url: 请求地址
**warrgs 控制访问的参数,一共13个

  • params: 字典或字节序列,作为参数增加到url中
  • data: 字典、字节序列或者文件对象,作为 Request 的内容
  • json: JSON 格式的数据,作为 Request 的内容
  • headers: 字典,HTTP定制头
  • cookies:字典或CookieeJar, request中的cookie
  • auth: 元组,支持HTTP认证功能
  • files: 字典类型,传输文件
  • timeout: 设定的超时时间,单位秒
  • proxies: 字典类型,设定访问代理服务器,可以增加登录认证

    1
    2
    3
    4
    pxs = {'http':'http//balabala',
    'https':'https"//balabala'
    }
    r= requests.request('GET','http://www.baidu.com',proxies=pxs)
  • allow_redirects: True/False,默认True,重定向开关

  • stream:True/False,默认True,获取内容立即下载开关
  • verify:True/False,默认True,,认证 SSL 证书开关
  • cert:本地SSL证书路径

网络爬虫的类型

按照尺寸区别

爬取网页,玩转网页。小规模,数据量小,爬取速度不敏感 requests 。

爬取网站,爬取系列网站. 中规模,数据规模较大,爬取速度敏感 Scrapy 库

爬取全网。大规模,搜索引擎,爬取速度关键,只能定制开发

反爬虫

来源审查: 判断 User-Agent 进行限制

检查来访 HTTP 协议头的 User-Agent 域,只响应浏览器或者友好爬虫的访问。

发布公告 Robots 协议

告知所有爬虫网站的爬取策略,要求爬虫遵守

Robots 协议

Robots Exclusion Standard 网络爬虫排除标准

作用: 网站告知网络爬虫哪些页面可以抓取,哪些不行。
形式: 在网站根目录下的 robots.txt 文件
使用:

  • 网络爬虫:自动或者人工识别robots.txt, 再进行内容爬取
  • 约束性: Robots 协议是建议但非约束性,网络爬虫可以不遵守,但是存在法律风险
CepheusSun wechat
订阅我的公众号,每次更新我都不一定会告诉你!
坚持原创技术分享,您的支持将鼓励我继续创作!
0%