【 爬虫】Requests 库的入门学习

此为北理嵩天老师mooc课程【网络爬虫与信息提取】的课程学习笔记,附带一些其他书籍博客的资料。

1、安装 Requests 库

使用命令行输入:

pip install requests

或者:

python -m pip install requests 

2 、requests 的常用方法

方法名称说明
requests.request()最基础的,构造请求,支撑其他方法的使用
.get()获取 html 网页的主要方法,对应GET
.head()获取html网页头信息,对应HEAD
.post()向html网页提交post请求
.put()向网页提交PUT请求
.patch向网页提交局部修改的请求
.delete()向网页提交删除的请求

requests.requests()为基础方法

request.requests(method, url, **kwargs)
  • method包含上述的get/put/post/options 等七种方法
    在这里插入图片描述
  • url为获取页面的链接
  • **kwargs 为控制访问的参数,共13个,可自主按需选择
  • params :字典或字节序列,可以作为 参数 加入到url中
  • data :对象,作为request的对应内容
  • json:JSON格式的数据,作为Request的内容
  • headers :字典,http定制的头 字段
  • cookies :request中的cookie
  • files :字典,向链接传输文件
  • auth :元祖,认证http功能
  • timeout :设定超时时间,秒为单位
  • proxies :字典类型,可以设定访问的代理服务器
  • allow_redirects :开关,允许不允许重定向
  • stream :文件下不下载,默认下载
  • verify :认证ssl
  • cert :本地ssl路径

具体说明可以转到函数定义去查看。

获取数据可以使用head和get, head方法获取的信息头部、即为摘要。get为全部信息,内容详细
发送修改可以使用post、patch、put等方法。

 r = requests.post(url,data = “”ABC“”)

patch 和 put的区别在于patch可以只提交需要更新的数据,而put需要将所有字段数据重新提交,不更改的会被删除。
post向url内容添加指定的表单、data等

r = requests.post(url,data = '字符串"或字典键值对等)

get方法

构造向服务器请求资源的requests对象,返回的的为response对象,包含各种信息。

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

包含页面链接、URL额外参数字典或字节流格式、其他访问控制可选参数。
Response 返回的常见属性:非函数无()

属性名称说明
r.status_codeHttp 请求的返回状态,200成,404或其他为失败。
r.textHttp相应内容的字符串形式,url的页面内容
r.encoding从HTTP的header中猜测的内容编码方式,一般不含中文
r.apparent_encoding从内容中分析出相应内容的编码方式,便于解析出中文
r.contentHTTP相应内容的二进制形式
连接异常

常用的requests库的异常,注意不是函数,无()

异常内容说明
requests.ConnectionError网络连接异常,dns查询失败,服务器防火墙拒绝连接
requests.HTTPErrorHttp错误异常
requests.URLRequiredURL缺失异常
requests.TooManyRedirects用户访问url重定向次数过多
requests.ConnectTimeout仅指与远程服务器连接时的超时异常
requests.Timeout发起到获得URL整个过程的超时异常

判断返回的response类型的状态是不是200,如果返回的不是200说明有错误,在程序中产生requests.HTTPError异常

r.raise_for_status()

3、网页爬取

爬取网页的通用代码框架:

import requests
def getHTMLText(url):
    try:
        r = requests.get(url , timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"

if __name__ == "__main__":
    url = "https://www.csdn.net/"
    print(getHTMLText(url))

示例3.1

爬取网页时网站可以通过robots.txt和识别requests请求的header规范、约束爬虫访问。所以有些网站会识别你的requests请求,如果其中的headers为python相关时可能报错、无法获取信息。此时人为构造键值对,改变用户属性
在这里插入图片描述
状态码503 说明访问异常。
修改User-Agent 模拟为浏览器身份表示。加入到原来headers中,再去访问。

kv = {"User-Agent":"Mozilla/5.0"}
url = "https://www.amazon.cn/dp/0545377579/ref=cngwdyfloorv2_recs_0/461-7699818-3098529?pf_rd_m=A1AJ19PSB66TGU&pf_rd_s=desktop-2&pf_rd_r=R9180B92B8TKWZC9QP4M&pf_rd_r=R9180B92B8TKWZC9QP4M&pf_rd_t=36701&pf_rd_p=db4e96ef-5fc1-47f8-92b2-b9a5e737b326&pf_rd_p=db4e96ef-5fc1-47f8-92b2-b9a5e737b326&pf_rd_i=desktop"
r = requests.get(url, headers = kv)
r.status_code
#输出200,表示成功

示例3.2

向搜索引擎提供关键词,自动获取检索结果。
百度搜索的关键词接口url连接为 http://www.baidu.com/s?wd=keyword
更改要搜索的关键词即可。以百度搜索CSDN为例
在这里插入图片描述
代码实现:

import requests
keyword = "CSDN"
try:
    kv = {"wd":keyword}
    r = requests.get("http://www.baidu.com/s",params=kv)
    print(r.request.url)
    r.raise_for_status()
    print(len(r.text))
    #输出检索到的内容字节长度
except:
    print("产生异常")

示例3.3

爬取网页上的一张图片,并保存在电脑指定路径内。
爬取一张帅气的哈士奇美照。
在这里插入图片描述
不知道为什么我在设置保存的文件路径时文件夹层数过多就会爬取失败,如果有大神了解原因,还望不吝赐教。

import requests
import os
url = "http://i.hao123.cn/attachment/info/201808/1533094309cjm12.jpg"
root = "E://pyrelat//"
#路径文件夹层数再多一点时就报错爬取失败
path = root + url.split("/")[-1]
try:
    if not os.path.exists(root):
        os.mkdir(root)
    if not os.path.exists(path):
        kv = {"User-Agent": "Mozilla/5.0"}
        r = requests.get(url, headers = kv)
        with open(path, "wb") as f:
            f.write(r.content)
            f.close()
            print("文件保存成功")
    else:
        print("文件已经存在")
except:
    print("爬取失败")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值