Python request库基本使用方法

request库的基本使用方法,不多bb,上代码,需要注意的地方都在注释里了

import requests
from bs4 import BeautifulSoup
def get_html_text(url):
    try:
        r=requests.get(url,timeout=50)#返回的r是Response类的对象,超过50s时抛出Timeout异常
        r.raise_for_status()#自动检查status_code是不是200,不是就抛出HTTPError异常
        #print(r.status_code)#status_code状态码是200才是返回成功,不是200就是失败
        #print(r.encoding)#看看编码方式
        #print(r.apparent_encoding)#备用编码
        r.encoding=r.apparent_encoding#使用当前encoding的值不能正确解码时,则用apparent_encoding的值替换encoding
        #print(r.text)
        #print(r.headers)
        return r.text
    except requests.HTTPError as http_error:
        return "HTTPError"
    except requests.Timeout:
        return "Timeout"


'''
Response对象包含了返回的网页的所有内容
Request对象是Response对象的一个属性
Response类属性:
r.status_code==200,访问成功
r.text,返回页面的字符串形式
r.encoding页面编码方式,若header中存在charset字段,get()方法执行后其编码方式自动保存在r.encoding中
若header无该字段,r.encoding自动设置为默认值ISO-8859-1
r.apparent_encoding是Request库提供的备选编码
get()方法执行时会分析页面内容推测其编码方式并将分析结果存放在r.apparent_encoding中,因此apparent_encoding中存放的往往是页面真正的编码方式
r.conten返回页面的二进制形式,如获取图片
'''

'''
使用Response对象r的基本流程:
r=requests.get(url,par)
r.status_code(检查状态码?=200)
r.encoding/r.text/r.apparent_encoding/r.content
'''

'''
requests库异常:
requests.ConnectionError
requests.HTTPError
requests.URLRequired
requests.Timeout
Response类提供了raise_for_status()方法供检查r.status_code是不是200,
不是就抛出HTTPError
'''
'''
requests库的7个主要方法:
!!!requests.get()获取HTML网页
!!!requests.head()获取HTTP头信息
requests.post()向HTML网页提交post请求,附加新数据
requests.put()向HTML网页提交put请求,覆盖原资源
requests.patch()向HTML网页提交修改请求,局部修改该资源
requests.delete()向HTML网页提交删除请求,删除该url资源
'''
'''
13个访问控制参数:
详见:https://blog.csdn.net/weixin_30402343/article/details/97472918
!!!params=字典或者字符串a,将a作为参数添加到get()的原url中
!!!headers:字典,HTTP请求头,作为Request对象Header的内容
!!!data:字典、字节序列,文件,作为Request对象body的内容
json:JSON格式的数据,作为Request对象body的内容
files:字典,形式为{filename: fileobject},表示要上传的文件
timeout设定超时时间
proxies设置代理服务器

headerValue={'user-agent': 'Chrome/10'}
r=requests.request('POST','http://www.baidu.com',headers=headerValue)
伪装爬虫

dict={'key1':1,"key2":2}
r=requests.post(my_url,data=dict)#附加新数据

r=requests.put(my_url,data=dict)
'''
def get_jjingdong_html(url):#通过控制参数设置内部对象request的headers,爬虫伪装
    try:
        kv={"user-agent":"Mozilla/5.0"}#爬虫伪装
        r=requests.get(url,headers=kv,timeout=50)#设置Request对象的Header里的user-agent字段的值
        r.raise_for_status()
        if r.encoding=="ISO-8859-1":#设置编码可读
            r.encoding=r.apparent_encoding
        #print(r.request.headers)
        #print(r.headers)
        #print(requests.head(url,headers=kv,timeout=50).headers)
        '''
        注意r.request.headers获得的是执行get方法时内部生成的Request对象的header,用控制参数可设置其值
        r.headers获得的是get方法执行后响应的header,其结果同requests.head(url).headers
        另外HTML网页<head>标签内容只能通过r.text获取,和HTTP header不是一个概念
        '''
        return r.text[:100]
    except requests.HTTPError as http_error:
        return "HTTPError"

def get_baidu_keyword():#设置百度搜索关键字,往url添加参数例子
    try:
        kv={"user-agent":"Mozilla/5.0"}#爬虫伪装
        dict_kw={"wd":"Python Java"}#设置关键字
        r=requests.get("http://www.baidu.com/s",params=dict_kw,headers=kv,timeout=50)
        r.raise_for_status()
        if r.encoding=="ISO-8859-1":#设置编码可读
            r.encoding=r.apparent_encoding
        print(r.request.url)
        #print(len(r.text))
    except requests.HTTPError:
        print("HTTPError")


def get_picture():#爬指定url的图片
    path="D:\Pictures\\s.jpg"
    url3="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1577101458513&di=492d3eeed207aa63d85bd7737de67c3f&imgtype=0&src=http%3A%2F%2Fwww.hscbw.com%2Fupfile%2F140709%2F1404886487138811.jpg"
    try:
        kv={"user-agent":"Mozilla/5.0"}#爬虫伪装
        r=requests.get(url3,headers=kv,timeout=50)
        r.raise_for_status()
        if r.encoding=="ISO-8859-1":#设置编码可读
            r.encoding=r.apparent_encoding
        with open(path,'wb') as fi:#图片是二进制文件
            fi.write(r.content)#写入二进制文件
        fi.close()
    except requests.HTTPError:
        print( "HTTPError")

def try_beautifulsoup():#测试BeautifulSoup
    try:
        r = requests.get("https://www.baidu.com", timeout=50)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        bs_demo=r.text
        soup=BeautifulSoup(bs_demo,"html.parser")
        print(soup.prettify())
    except requests.HTTPError as http_error:
        print( "HTTPError")

if __name__=="__main__":
    url1="https://www.baidu.com"
    get_html_text(url1)
    url2 = "https://www.bilibili.com/blackboard/activity-shihuakoupc.html"
    get_jjingdong_html(url2)
    get_baidu_keyword()
    get_picture()
    try_beautifulsoup()
发布了17 篇原创文章 · 获赞 7 · 访问量 7100

猜你喜欢

转载自blog.csdn.net/hrwy2920566283/article/details/103713919