02-requests模块的概述

什么是requests模块
官方文档:https://requests.readthedocs.io/en/master/

  • requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。
  • 为什么要使用requests模块
    因为在使用urllib模块的时候,会有诸多不便之处,总结如下:
  • 手动处理url编码
  • 手动处理post请求参数
  • 处理cookie和代理操作繁琐

  • 使用requests模块:
  • 自动处理url编码
  • 自动处理post请求参数
  • 简化cookie和代理操作

    如何使用requests模块
    安装:
pip install requests

使用流程

  • 指定url
  • 基于requests模块发起请求
  • 获取响应对象中的数据值
  • 持久化存储

response的常用属性

  • response.text 响应体 str类型
  • respones.content 响应体 bytes类型
  • response.status_code 响应状态码
  • response.request.headers 响应对应的请求头
  • response.headers 响应头
  • response.request.cookies 响应对应请求的cookie
  • response.cookies 响应的cookie(经过了set-cookie动作)
    Requests库中有7个主要的函数
    分别是 request() 、get() 、 head() 、post() 、put() 、patch() 、delete() 。这七个函数中request()函数是其余六个函数的基础函数,其余六个函数的实现都是通过调用该函数实现的。

方法 说明

  • requests.request() 构造一个请求,支撑一下方法的基础方法
  • requests.get() 获取HTML网页的主要方法,对应于HTTP的GET(请求URL位置的资源)
  • requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD(请求URL位置的资源的头部信息)
  • requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST(请求向URL位置的资源附加新的数据)
  • requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT(请求向URL位置储存一个资源,覆盖原来URL位置的资源)
  • requests.patch() 向HTML网页提交局部修改的请求,对应于HTTP的PATCH(请求局部更新URL位置的资源)
  • requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE(请求删除URL位置储存的资源)
    而这几个函数中,最常用的又是 requests.get() 函数。get函数有很多的参数,我只举几个比较常用的参数

参数 说明

  • url 就是网站的url
  • params 将字典或字节序列,作为参数添加到url中,get形式的参数
  • data 将字典或字节序列,作为参数添加到url中,post形式的参数
  • headers 请求头,可以修改User-Agent等参数
  • timeout 超时时间
  • proxies 设置代理
# -*- coding: utf-8 -*-
import requests #调用requests模块
from lxml import etree #调用html解析
from Chaojiying_Python import chaojiying #调用超级鹰打码平台
import time # 调用时间模块







headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"

} #模仿浏览器UA头

session = requests.Session()# 动态获取cookie
# 识别验证码
url ="https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
page_text = session.get(url=url,headers=headers).text
# 解析验证码图片
tree = etree.HTML(page_text)
img_src = "https://so.gushiwen.cn/"+tree.xpath('//*[@id="imgCode"]/@src')[0]
# 将验证码图片保存到本地
img_data = session.get(img_src,headers=headers).content
with open ('C:/Users/gpc/Desktop/python/Chaojiying_Python/code.jpg',"wb") as fp:
    fp.write(img_data)

# 识别验证码
code_text = chaojiying.Chaojiying_Client.tranformImgCode()
time.sleep(2)


login_url = "https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx"
data = {
    # 如果在请求参数中看见一组乱序的请求参数,需要抓包验证下是否动态变化如下:"__VIEWSTATE" "__VIEWSTATEGENERATOR"
    # 如果是动态变化的参数一般会隐藏在前台源码中,我们需要进行xpaht 或者正则 等方式进行提取 就可以获得实时的参数
    # 如果前台源码中没有,我们可以通过抓包全局收索获取对应的数据包提取参数赋值到data中
    "__VIEWSTATE": "wLzVsPN64jZIa8aQJI9HzVvaaknH6pBhUG+UOMQKX8NEFV49xwtLRgU8GH4O1o+mClDbtnYiKbXMOIM6VRh7HGzM4hpMpd0qBUM3b/pXlzZ2gnbcuB+5RUBJ/i0=",
    "__VIEWSTATEGENERATOR": "C93BE1AE",
    "from": "http://so.gushiwen.cn/user/collect.aspx",
    "email": "18398149392",
    "pwd": "cheng.1023",
    "code": code_text,# 验证码动态变化
    "denglu": "登录"
}
# 对点击登录按钮发起请求,获取了登录成功后的页面源码数据
page_text_login = session.post(url = login_url,headers=headers,data=data).text
print(page_text_login)



# -*- coding: utf-8 -*-
import requests # 调用模块

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
} #模仿浏览器UA头
url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList" # 指定url

for pg in range(1,6):
    data = {
        "on": "true",
        "page": str(pg),
        "pageSize": "15",
        "productName":"",
        "conditionType": "1",
        "applyname":"",
        "applysn":""
    }

    response = requests.post(url=url,headers=headers,data=data) # 发起请求get方法的返回值为响应对象

    page_text = response.json() # 将获取的字符串形式的json数据序列化成字典或者列表对象
    uuid = page_text["list"]
    for idd in uuid:
        iidd = (idd["ID"])

# 爬取详情数据
        url2 = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById" # 指定url
        data2 = {
            "id":iidd
        }
        response = requests.post(url=url2,headers=headers,data=data2) # 发起请求get方法的返回值为响应对象

        page_text = response.json() # 将获取的字符串形式的json数据序列化成字典或者列表对象

        qymc = page_text["epsName"]
        xkzbh = page_text["productSn"]
        xkxm = page_text["certStr"]
        qyzs = page_text["epsAddress"]
        scdz = page_text["epsProductAddress"]
        shxydm = page_text["businessLicenseNumber"]
        fddbr = page_text["businessPerson"]
        qyfzr = page_text["legalPerson"]
        zlfzr = page_text["qualityPerson"]
        fzjg = page_text["qfManagerName"]
        qfr = page_text["xkName"]
        rcjdgljg = page_text["rcManagerDepartName"]
        rcjdglry = page_text["rcManagerUser"]
        yxq = page_text["xkDate"]
        fzrq = page_text["xkDateStr"]
        xiangqing = ("企业名称:" + qymc + "
" + "许可证编号:" + xkzbh + "
" + "许可项目:" + xkxm + "
" + "企业住所:" + qyzs + "
" + "生产地址:" + scdz + "
" + "社会信用代码:" + shxydm + "
" + "法定代表人:" + fddbr + "
" + "企业负责人:" + qyfzr + "
" + "质量负责人:" + zlfzr + "
" + "发证机关:" + fzjg + "
" + "签发人:" + qfr + "
" + "日常监督管理机构:" + rcjdgljg + "
" + "日常监督管理人员:" + rcjdglry + "
" + "有效期至:" + yxq + "
" + "发证日期:" + fzrq)
        print(xiangqing)



        with open ("药监局详情爬取.txt","a",encoding="utf-8") as  fp:  # 持续化存储 (w写 r读 a追加)
            fp.write(xiangqing + "
")
# -*- coding: utf-8 -*-

import requests # 调用模块

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
} #模仿浏览器UA头
url = "https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20" # 指定url

params = {
    'type': '5',
    'interval_id': '100:90',
    'action':'',
    'start': '0',
    'limit': '20'
}

response = requests.get(url=url,headers=headers,params=params) # 发起请求get方法的返回值为响应对象

page_text = response.json() # 将获取的字符串形式的json数据序列化成字典或者列表对象
#page_text = response.text # 获取响应数据,text为字符串形式的相应数据

# 解析出电影的名称+评分

for movie in page_text:
    name = movie['title']
    score = movie['score']
    print(name,score)



    with open ("豆瓣.txt","a",encoding="utf-8") as  fp:  # 持续化存储 (w写 r读 a追加)
        fp.write(name + " " + score + "
")
原文地址:https://www.cnblogs.com/gemoumou/p/13635343.html