feb-12th:requests库

--------------------12th-feb-----------------
-------------------------------------单元1:requests库入门
    1.4HTTP协议及Requests的主要方法


NO1:Requests库的7个主要方法-------------:
    1:requests.request():构造一个请求,支撑一下各方法的基础方法
    2:requests.get():    获取HTML网页的主要方法,对应于HTTP的GET
    3:requests.head():   获取HTML网页头部信息的方法,对应于HTTP的HEAD
    4:requests.post():   向HTML网页提交POST请求的方法,对应于HTTP的POST
    5:requests.put():    向HTML网页提交PUT请求的方法,对应于HTTP的PUT
    6:requests.patch():  向HTML网页提交局部修改请求,对应于HTTP的PATCH
    7:requests.delete(): 向HTTP页面提交删除请求,对应于HTTP的DELETE
    
NO2:HTTP协议------------------------:
1:定义部分
     --HTTP,Hypertext Transfer Protocol:超文本传输协议
     HTTP是一个基于"请求与响应"模式的。无状态的应用层协议
2:HTTP的理解
     --HTTP协议采用URL作为定位网络资源的标识
         URL格式 http://host[:port][path]
         host:合法的Internet主机域名或IP地址
         port:端口号,缺省端口为80
         path:请求资源的路径


         HTTP URL实例:
             http://www.bit.cn
             http:220.181.111.188/duty
3:重点HTTP协议             
         HTTP URL的理解:
         URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源


      --HTTP协议对资源的操作:
          GET:   请求获取URL位置的资源
          HEAD:  请求获取URL位置资源的响应 信息报告,即获取该资源的头部信息
          POST:  请求URL位置的资源附加 新的数据
          PUT:   请求向URL位置存储一个资源,覆盖原URL位置的资源
          PATCH: 请求局部更新URL位置的资源,即改变该处资源的部分内容
          DELETE:请求删除URL位置存储的资源


        请求:
           使用GET HEAD
        修改使用:
           使用PUT POST PATCH DELETE
               PATCH与PUT的区别:
                   PATCH局部修改,PUT全部覆盖
-------------------------------------单元1:requests库入门
    1.5Requests库的主要方法解析
    
NO1:requests.request(method,url,**kwargs)
    ---method:请求方式
        r = requests.request("GET",url,**kwargs)
        r = requests.request("HEAD",url,**kwargs)
        r = requests.request("POST",url,**kwargs)
        r = requests.request("PUT",url,**kwargs)
        r = requests.request("PATCH",url,**kwargs)
        r = requests.request("delete",url,**kwargs)
        r = requests.request("OPTIONS",url,**kwargs)
    ---**kwargs:控制访问方式
        1:params:字典或字节序列,作为参数增加到url中
            kv = {"key1":"value1","key2":"value2"}
            r = requests.request("GET","http://python123.io/ws",params=kv)
            print(url)
            返回值:
                http://python123.io/ws?key1=value1&key2=value2
        2:data:字典,字节序列或文件对象,作为Request的内容
            kv = {"key1":"value1","key2":"value2"}
            r = requests.request("POST","http://python123.io/ws",date=kv)
            body = "主体内容"
            r = requests.request("POST","http://python123.io/ws",date = body)
        3:json:JSON格式的数据,作为Request的内容
            kv = {"key1":"value1"}
            r = requests.request("POST","http://python123.io/ws",json=kv)
        4:headers:字典,HTTP定制头
            hd = {"user-agent":"chrom/10"}
            r = requests.request("POST","http://python123.io/ws",headers=kv)
        5:cookies:字典或者CookieJar,Request中的cookie
        6:auth:元组,支持HTTP认证功能
        7:files:字典类型,传输文件
            向一个连接提交一个文件
            fs = {"file":open("data.xls","rb")}
            r = requests.request("POST","http://python123.io/ws",files=fs)
        8:timeout:设定超时时间,秒为单位
            r = requests.request("GET","http://baodu.com",timeout=10)
        9:proxies:字典类型,设定代理服务器,可以增加登录认证
            防止对爬虫的逆追踪
            pxs = {"http":"http://user:pass@10.10.10.1:1234"
                   "https":"https://10.10.10.1:4321"}
            r = requests.request("GET","http://www.baidu.com",proxies=pxs)



        10:allow_redirects:True/False,默认为True,重定向开关
        11:stream:True/False,默认为True,获取内容立即下载开关
        12:verify:True/False,默认为True,认证SSL证书开关
        13:cert:本地SSL证书路径
        
        ---------------
        params    -------------requests.get中没有这个参数
        data
        json
        headers...................................
        ----------------
        coookies..................................
        auth
        files
        timeout...................................
        ----------------
        proxies...................................
        allow_redirects...........................
        stream
        verify
        ---------------
        cert
-------------------------------------单元1:requests库入门
    1.6单元小结
    .............................


-------------------------------------单元2:网络爬虫盗亦有道
    2.1网络爬虫引发的问题
NO1:爬取网页的尺寸
    ---
    小规模,数据量小
    爬取速递不敏感
    Requests库
    功能:
    爬取网页,玩转网页
    ---
    中规模,数据规模较大
    爬取速度敏感
    scrapy库
    功能:
    爬取网站,爬取系列网站
    ---
    大规模,搜索引擎,爬取速度关键
    定制开发
    功能:
    爬取全网


NO2:网络爬虫的限制
    ---1:来源审查:判断User-Agent进行限制
        检查来访HTTP协议头的User-Agent域,只响应浏览器或者友好爬虫的访问
    ---2:发布公告:robots协议
        告知
-------------------------------------单元2:网络爬虫盗亦有道
    2.2robots协议
NO1:Robots协议
    Robots Exclusion Standard :网络爬虫排除标准
    作用:告知那些页面可以抓取,那些页面不可以抓取
-------------------------------------单元2:网络爬虫盗亦有道
    2.3robots协议的遵守方式
    
NO1:网络爬虫:自动或人工识别robots.txt,再进行内容爬取


-------------------------------------单元2:网络爬虫盗亦有道
    2.4单元小结
    ........................


-------------------------------------单元3:Requests库网络爬虫实战
    3.1京东商品页面的爬取
NO1:r.text返回的是一个列表,因为:可以用r.text[:1000]


-------------------------------------单元3:Requests库网络爬虫实战
    3.2亚马逊商品页面的爬取
NO1:这个例子通过服务器返回的API错误信息状态,告诉要设置headers关键字参数
import requests
r = requests.get()
---查看服务器返回的头部信息的方法
    注意:
    r.request.headers


-------------------------------------单元3:Requests库网络爬虫实战
    3.3百度360关键词提交
NO1:百度的关键词接口:
    http://www.baidu.com/s?wd=keyword
    360的关键词接口
    http://www.so.com/s?q=keyword
import requests
kv = {"wd":"python"}
r = requests.get("http://www.baidu.com/s",params=kv)
r.status_code
"查看向网络请求的url,可以使用respnse对象包含的request信息"
r.request.url
len(r.text)
-------------------------------------单元3:Requests库网络爬虫实战
    3.4网络图片的爬取和存储


NO1:网络图片链接的格式:
http://www.example.com/picture.jpg
图片的保存位置
import requests
path = "D:/abc.jpg"
url = "url"
r = requests.get(url)
r.status_code
"保存图片到文件"
with open (path,"wb")as f:
    f.write(r.content)
    f.close()
    
---全代码
import requests
import os
url = "url"
root = "D://pic//"   #根目录
path = root + url.split("/")[-1]  #文件目录
try:
    if not os.path.exists(root):
        os.mkdir(root)
    if not os.path.exists(path):
        r = requests.get(url)
        with open(path,"wb") as f:
            f.write(r.content)
            f.close()
            print("文件保存成功")
    else:
        print("文件已存在")
except:
    print("爬取失败")
-------------------------------------单元3:Requests库网络爬虫实战
    3.5IP地址归属地的自动查询
ip138
---NO1:如何向程序提交IP地址
    手动输入IP地址的网络url的形式,以ip138为例
    http://m.ip138.com/ip.asp?ip=ipaddress


import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
    r = requests.get(url+"202.204.80.112")
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[-500:])
except:
    print("爬取失败")  #为什么没有用params


---:异常重要的总结:
    我们在网站上看到的人机交互方式,比如说文本框的,图形的,需要点击按钮的
在正式向后台服务器提交的时候,其实都是以链接的形式来提交的,只要通过浏览器的
解析知道向后台提交的链接形式,那么就可用程序来代替这一形式。
    所有在向网站提交内容的时候,尝试挖掘网站后台的API是什么
    




-------------------------------------明天尝试内容
    1:图片爬取检验
    2:ip地址检验
    3:**kwargs
    4:再看requets库的前几章内容
    5:异常重要的总结:
        像ip地址查询那样,再点击图片时,


    6:亚马逊的没有用headers时,返回的内容,r.request.headers


-------------------------------------单元3:Requests库网络爬虫实战
    3.6单元小结
NO1:京东商品页面的爬取 ok
    亚马逊页面的爬取,用到来源审查
    百度360关键字的提交,用到**kwargs的params
    网络的图片的爬取和存储,事实上只要是网络上以二进制存储的内容,都ok
    ip地址的自动查询,启示:观察向服务器提交的请求,人工的分析网站的接口
        思考:怎么看待网络的内容
            爬虫的视角:网络上的任何内容都是指向url的,通过构造url
        来实现对网络资源的获取
    
    http协议的学习
    一个对网络资源定位的url
    一个对资源操作的6种操作,get head ,post ,put ,patch, delete
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值