Python网络爬虫——requests模块

目 录

1、urllib库

2、Requests介绍 

requests.request() 方法介绍,响应参数

3、参数传递

get方式,post方式,文件方式,字符串方式,代理

4 、 异常处理

5 、登陆操作

账号与密码,cookies,session


1、urllib库

这是程序自带的库,不需要安装。

#coding:utf-8  
from urllib.request import urlopen

url = "http://www.zuihaodaxue.com/BCSR/wangluokongjiananquan2018.html" 
html = urlopen(url,timeout = 10) 
#常用的方法:
print(html.read())
print(html.read().decode("utf-8"))
print(html.info())
print(html.getcode())

这将会输出 这个网页的全部 HTML 代码。

原理:

现在大多数网页需要加载许多相关的资源文件。当网络浏览器遇到一个标签时,比如 ,会向服务器发起一个请求,以获取 cuteKitten.jpg文件中的数据为用户充分渲染网页。

但是,我们的 Python 程序没有返回并向服务器请求多个文件的逻辑,它只能读取我们已经请求的单个 HTML 文件。

工具介绍:

urllib 是 Python 的标准库,包含了从网络请求数据,处理 cookie,甚至改变像请求头和用户代理这些元数据的函数。

urlopen 用来打开并读取一个从网络获取的远程对象。因为它是一个非常通用的库(它可以轻松读取 HTML 文件、图像文件,或其他任何文件流)。

2、 Requests介绍 

(1)七个主要方法

    requests.request()      

    requests.get()       获取URL信息

    requests.head()      获取头信息

    requests.post()      提交附加数据的请求

    requests.put()       提交覆盖原有URL的请求

    requests.patch()     提交修改请求

    requests.delete()    提交删除请求

(2)requests.request()

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


       method:    两个参数  ,get/put

       **kwargs:  13个参数

              params:    字典或字节(查询参数)

              data:  字典、字节或文件对象(请求内容)

              json:  json格式的数据(请求内容)

              headers:字典(HTTP定制)

              auth:  元组(HTTP认证)

              files: 字典类型,传输文件

              timeout:设置超时(秒)

              proxies:字典类型(代理)


(3)响应介绍

response = requests.get(url, params=None, **kwargs)


response.text               获取响应文本

response.content         获取网页上的二进制图片、视频

response.encoding = response.apparent_encoding       获取网页编码

response.status_code            获取响应状态码

response.headers         获取响应头信息

response.cookies         获取cookies信息

response.url             获取url信息

response.history         获取history信息


3、参数传递

(1)get与post

get方式提交:

import requests

payload = {'key1': 'value1', 'key2': 'value2', 'key3': None}
r = requests.get('http://xxx', params=payload)

Post表单如下:

First name:
import requests

params = {'firstname': 'Ryan', 'lastname': 'Mitchell'}
r = requests.post("url1", data=params)
print(r.text)

(2)文件与字符串

上传图片文件的表单如下:

Submit a jpg, png, or gif:
import requests

url = 'http://xxx/post'
files = {'upload File': open('../files/Python-logo.png', 'rb')}
r = requests.post("url1",files=files)

字符串JSON处理:

import requests
import json

url = 'https://xxx'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))
#或者
r = requests.post(url, json=payload)

(3)其他设置

代理

import requests

proxies = {
  'http': 'http://10.10.1.10:3128',
  'https': 'http://10.10.1.10:1080',
}
requests.get('http://xxxx.com', proxies=proxies)

重定向

r=requests.head('http://github.com', allow_redirects=True)

4  异常处理

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')

HTTPError:如果 HTTP 请求返回了不成功的状态码

ReadTimeout:请求超时

ConnectionError:遇到网络问题(如:DNS 查询失败、拒绝连接等)

TooManyRedirects:若请求超过了设定的最大重定向次数

RequestException:所有的requerst 异常

5 登陆操作

(1)通过账号与密码

loginurl='https://xxxxx.com/check' 

formData={'username':'*****','password':'*****'} 

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/52.0'} 

res=requests.post(loginurl,data=formData,headers=headers) 

(2)通过cookies

 raw_cookies="k1=v1; k2=v2; k3=v3;
 cookies={} 

 for line in raw_cookies.split(';'): 
       key,value=line.split('=',1) 
       cookies[key]=value 

loginurl='http://xxxxxx.com' 
res=requests.post(loginurl,cookies=cookies) 
print(res.content) 

其中的cookies获取后将cookies的值以字典的方式存储,然后进行使用。

(3)通过session

大多数新式的网站都用 cookie 跟踪用户是否已登录的状态信息。有的网站经常暗自调整cookie,或者如果你从一开始就完全不想要用 cookie,那么 Requests 库的session函数可以完美地解决这些问题。会话(session)对象(调用 requests.Session() 获取)会持续跟踪会话信息,像 cookie、header,甚至包括运行 HTTP 协议的信息。

import requests as req 

s=req.Session() 
param={'username':'****','password':'***'} 

url='https://xxxxxx' 
r=s.post(url,data=param,verify=False)  #登录获取登录后的session 
print(r.content)

如果有ssl认证,可以在post的时候,加入认证的参数,取消ssl的认证校验 requests.post(url,data=dataform,verify=False)

你可能感兴趣的:(python,爬虫入门,python,网络)