Python Reptile learning (a) the use of libraries and robots protocol requests

(A) reptiles require libraries and frameworks:

       

  

(B) reptiles restrictions:

  

 

      1, Robots Protocol Overview:

    Site owners can create in the root of the site the robots.txt file, User-agent: Visitors can not define; Disallow crawling of the directory can not be defined

    For example: http: //www.baidu.com/robots.txt the sections:     

 //不允许Baiduspider访问如下目录
User-agent: Baiduspider 
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
//不允许Googlebot访问如下目录
User-agent: Googlebot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh

  2,Robots协议的使用:爬虫要求,类人行为爬虫可以不用遵守robots协议

    

 

     

 

 

(三)使用Requests库:

  1,安装命令:pip install requests

  2,测试

import requests;
r=requests.get("http://www.baidu.com")
print(r.status_code)
#如果requests库安装成功,则打印200
r.encoding='utf-8'
r.text #打印网页内容

  常见方法: 

    

 

 

     1,requests.request()方法:

      

 

 

       

 

 

       

      

 

 

       

 

 

       

      

 

 

       

 

 

       

 

 

       

 

 

       

 

 

       

 

 

       

 

 

 

      1, 第三个参数使用params=xx,将数据添加到url后面

       2,第三个参数使用data=xxx,将数据赋值到内容

       3,第三个参数使用json=xx,将内容赋值到json

       4,第三个参数使用headers=字典类型数据;可以修改网页headers的属性值

      5,第三个参数使用timeout=n,设置访问时间,当访问超时则报异常

      6,第三个参数使用proxies=xx,设置访问的代理服务器(xx为字典数据,可以存放http或https代理),可以有效隐藏爬虫原IP,可以有效防止爬虫逆追踪

       例一:

        

 

 

     例二:第三参数使用data=xxx,将数据赋值到内容   

import requests;
from _socket import timeout
#from aifc import data               
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)  
        r.raise_for_status()           #如果连接状态不是200,则引发HTTPError异常
        r.encoding=r.apparent_encoding #使返回的编码正常
        print("连接成功")
        return r.status_code
    except:
        print("连接异常")
        return r.status_code

url="http://httpbin.org/"
if getHTMLText(url)==200:
    payData={'name;':'zs',"sex":"man"};
    r=requests.request("POST",url+"post",data=payData)  #第一个参数赋什么值,第二个参数在url后就添加什么参数
    print(r.text)
    

      运行截图:

        

    2,requests.get()方法:**kwargs是request方法中除了params外的其他12个参数(最常用的方法)

      

 

 

       

 

 

       

 

 

       r.encoding:当连接的网页的<head>标签没有charset属性,则认为编码为ISO-8859-1

      当连接失败时:

      

 

      抛出异常方法:

 

       

#判断url是否可以正常连接的通用方法:
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 "连接异常"

    3,requests.head()方法:

    

 

 

    4,requests.post()方法:

    

    

 

 

    5,requests.put()方法:

    

 

 

    6,requests.patch()方法:

    

 

 

   7,requests.delete()方法:

    

 

 

  8,HTTP协议: 

    

    

(四)爬取网站数据案例;

  例一:爬取起点某小说某章节

import requests;
from _socket import timeout
#from aifc import data
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)  
        r.raise_for_status()           #如果连接状态不是200,则引发HTTPError异常
        r.encoding=r.apparent_encoding #使返回的编码正常
        print("连接成功")
        return r.status_code
    except:
        print("连接异常")
        return r.status_code

url="https://read.qidian.com/chapter/z4HnwebpkxdqqtWmhQLkJA2/pYlct39tiiVOBDFlr9quQA2"
access={"user-agent":"Mozilla/5.0"}              #设置访问网站为浏览器Mozilla5.0
if getHTMLText(url)==200:
    #pst={"http":"http://user:[email protected]:1234","https":"https://10.10.10.1:4321"} #设置代理
    r=requests.get(url,headers=access)         #访问网站设置代理服务器
    #r.encoding="utf-8"
    print(r.request.headers)            #获取头部信息
  print(r.text[2050:3000])

  截图:

    

 

         

 

  例二:保存网上各种格式文件到本地:

import os
import requests
url="http://a3.att.hudong.com/53/88/01200000023787136831885695277.jpg"  #可以是图片,音乐,视频等的网上地址
access={"user-agent":"Mozilla/5.0"}
file="D://picture//"      #定义图片保存的本地文件
path=file+url.split("/")[-1]
print(path)
try:
    if not os.path.exists(file):          #如果不存在目录D://picture就新建
        os.mkdir(file)
    if not os.path.exists(path):
        r=requests.get(url,headers=access)
        with open(path,"wb") as f:         #打开文件path作为f;
            f.write(r.content)              #r.content:爬取的文件的二进制形式
            f.close()
            print("图片保存成功")
    else:
        print("文件已保存")
except:
    print("爬取失败")

  例三:

Guess you like

Origin www.cnblogs.com/lq13035130506/p/12243806.html