requests 爬虫

requests 库只是一个工具,是工具就有它的使用方式,下面是使用 requests 库的 GET 方法请求网站URL的方法

import requests
response = requests.get("https://www.baidu.com/?tn=monline_3_dg")
print(response.text)

requests 库的通用代码函数框架

# 爬取网页的通用代码框架(加入异常处理方法)
import requests

# 定义一个爬虫通用框架函数
def getHTMLText(url):
    try:
        # 通过get方法请求url并设定响应时间
        r = requests.get(url,timeout=30)
        # 如果状态码不是200,引发 HTTPError 异常
        r.raise_for_status()
        # 解析返回数据的编码方式
        r.encoding = r.apparent_encoding
        # 输出返回网页的内容
        return r.text
    except:
        return "产生异常"

更改请求头 headers,

  • 先构造一个键值对:kv = {"user-agent":"Mozilla/5.0"}

  • 修改爬虫的头部信息: r = requests.get(url,headers = kv)

  • Mozilla/5.0:是一个标准的浏览器标识

# 爬取网页的通用代码框架(加入异常处理方法)
import requests

# 定义一个爬虫通用框架函数
def getHTMLText(url):
    try:
kv
= {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36"} # 通过get方法请求url并设定响应时间 r = requests.get(url,headers = kv,timeout=30) # 如果状态码不是200,引发 HTTPError 异常 r.raise_for_status() # 解析返回数据的编码方式 r.encoding = r.apparent_encoding # 输出返回网页的内容 return r.text except: return "产生异常"

更改请求头爬取拉勾网实例

import requests
url = "https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
try:
    kv = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36"}
    r = requests.get(url,timeout=30,headers=kv)
    r.raise_for_status
    r.encoding = r.apparent_encoding
    print(r.text)
except:
    print("请求异常")

使用 post 方法发送请求

# 发送 post 请求
import requests
url = 'https://www.lagou.com/zhaopin/Python/?labelWords=label'
data = {
    "first":"true",
    "pn":1,
    "kd":"python"
}
kv = {'Referer':'https://www.lagou.com/zhaopin/Python/?labelWords=label',
     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36'}
r = requests.post(url,headers=kv,data=data)
print(r.text)
print(r.json())

使用代理 IP

  • 只需在(get 或 post )传递 proxies 参数就可以了实例代码如下:
    import requests
    url = 'http://httpbin.org/get'
    kv = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36'}
    pr = {
        "http":"101.64.32.100:808"
    }
    r = requests.get(url,headers=kv,proxies=pr)
    # 使用打开文件的方式
    with open('xx.html','w',encoding='utf-8') as fp:
        fp.write(r.text)

    requests处理cookie信息

    import requests
    
    r = requests.get("https://www.baidu.com/")
    print(r.cookies)
    # 以字典的方式展示cookies信息
    print(r.cookies.get_dict())

    session

    • 如果使用 requests ,要共享 cookie 的目的,那么可以 requests 库给我们提共的 session 对象,这里的 session 只是一个绘画对象而已

    登入人人网实例

    import requests
    
    url = "http://www.renren.com/PLogin.do"
    
    data = {"email":"[email protected]","password":"pythonspider"}
    kv = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36"
    }
    # 登入
    session = requests.Session()
    session.post(url,data=data,headers=kv)
    # 访问个人中心
    resp = session.get("http://www.renren.com/880151247/profile")
    with open('renren.html','w',encoding='utf-8') as fp:
        fp.write(resp.text)

    要获取网站上的视频或图片就将获取的内容返回为二进制格式,实例如下:

    import requests
    response = requests.get('https://github.com/favicon.ico')
    print(type(response.text),type(response.content))
    print(response.text)
    # content 是获取内容的二进制内容
    print(response.content)

    有时候我们获取的内容格式为 json 格式可以这样解析

    import requests
    response = requests.get("http://httpbin.org/get")
    print(type(response.text))
    print(response.json())
    print(type(response.json()))

    以下是 requests 库的各种请求的返回内容

    import requests
    response = requests.get('https://www.baidu.com/?tn=monline_3_dg')
    # 打印response的类型
    print(type(response))
    # 查看返回的状态码
    print(response.status_code)
    # 打印返回的值的属性
    print(type(response.text))
    # 打印返回的值
    print(response.text)
    # 查看返回的cookies值
    print(response.cookies)
    import requests
    requests.post('https://www.baidu.com/?tn=monline_3_dg')
    requests.put('https://www.baidu.com/?tn=monline_3_dg')
    requests.delete('https://www.baidu.com/?tn=monline_3_dg')
    requests.head('https://www.baidu.com/?tn=monline_3_dg')
    requests.options('https://www.baidu.com/?tn=monline_3_dg')

猜你喜欢

转载自www.cnblogs.com/yuanjian6/p/10166417.html